草庐IT

static_assert

全部标签

c++ - 声明 'static const'和 'const static'有什么区别

当我在C++中做声明时,staticconstintSECS=60*MINUTE;conststaticintSECS=60*MINUTE;这两者有什么区别吗? 最佳答案 isthereanydifferencebetweenthesetwo?没有。一点也不。顺序无关紧要(在这种情况下!)。此外,如果你这样写:constintSECS=60*MINUTE;//atnamespacelevel在命名空间级别,那么它等同于:staticconstintSECS=60*MINUTE;因为在namespace级别const变量默认具有内部链

C++11 static assert for equality comparable type?

如何static_assert模板类型是C++11中的EqualityComparable概念? 最佳答案 您可以使用以下类型特征:#includetemplatestructis_equality_comparable:std::false_type{};templatestructis_equality_comparable()==std::declval(),(void)0)>::type>:std::true_type{};您将以这种方式进行测试:structX{};structY{};booloperator==(Xcon

c++ - 宏 `assert`会在C++20中被移除吗?

根据cppreference,assert将用作C++属性。但是,已经有大量项目严重依赖宏assert,有什么不好的影响吗? 最佳答案 没有。提案p0542r5其中介绍了C++20契约说:Notethatwhileassert(expression)wouldexpandasafunction-likemacrowiththeappropriateheader,assert:isnotafunction-likeinvocation,sodoesnotexpand. 关于c++-宏`as

c++ - 如何在实现文件中初始化一个 static const set<string>?

我对staticconstset的初始化似乎不正确,我很感激你的指导方针:obj.h:classobj{...private:staticconstsetkeywords;...}obj.cpp:conststringkw[]={"GTR","LTR","LEQ","GEQ","NEQ","SQRT","sqrt"};constsetobj::keywords=(kw,kw+sizeof(kw)/sizeof(kw[0]));但这会产生错误:error:conversionfrom‘conststring*{akaconststd::basic_string*}’tonon-scala

c++ - Assert() - 它有什么用?

我不明白assert()的用途。我的讲师说assert的目的是发现错误。例如:doubledivide(inta,intb){assert(0!=b);returna/b;}以上断言是否合理?我认为答案是肯定的,因为如果我的程序不应该与0(数字零)一起使用,但不知何故零确实进入了b变量,然后代码出了问题。我说得对吗?你能给我一些关于justifiedassert()的例子吗?问候 最佳答案 assert用于验证如果程序正确。assert在您的示例中是否合理取决于divide的规范:如果b!=0是前提条件,那么assert通常是验证它

c++ - Python API C++ : "Static variable" for a Type Object

我有一个关于静态变量和TypeObjects的小问题。我使用APIC包装一个c++对象(我们称它为Acpp),它有一个名为x的静态变量。让我们将我的TypeObject称为A_Object:typedefstruct{PyObject_HEADAcpp*a;}A_Object;TypeObject作为“A”附加到我的python模块“myMod”。我已经定义了getter和setter(tp_getset),这样我就可以从python访问和修改Acpp的静态变量:>>>importmyMod>>>myA1=myMod.A(someargs...)>>>myA1.x=34#usingth

c++ - 有没有理由我们能够在类定义中定义 [static const int] 而不是其他 static const 类型?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whyaren'tstaticconstfloatsallowed?在C++中这不可能吗?这让我很困惑。staticconstintA=100;//noerrorstaticconstfloatB=2.0f;//error,can'tdefinethistypeinclassdefinition.

c++ - `constexpr`、 `static_assert` 和 `if constexpr(...)` 变量之间的模板中 `constexpr` lambda 的评估不一致

(使用g++7.0主干。)给定以下“类型到值包装”实用程序...templatestructtype_wrapper{usingtype=T;};//"Wraps"atypeintoa`constexpr`value.templateconstexprtype_wrappertype_c{};...我创建了以下函数来检查表达式的有效性:templateconstexprautois_valid(TF){return[](auto...ts)constexpr{returnstd::is_callable{};};}is_valid函数可以如下使用://Evaluatesto`true`

c++ - 与 static_assert 和 boost::hana 相关的 Clang 编译错误

考虑以下使用-std=c++14在Clang3.8上成功编译的问题。#includenamespacehana=boost::hana;intmain(){constexprautoindices=hana::range();hana::for_each(indices,[&](autoi){hana::for_each(indices,[&](autoj){constexprbooltest=(i==(j==i?j:i));static_assert(test,"error");});});}这个测试非常荒谬,但这不是重点。现在考虑一个替代版本,其中测试直接放在static_asse

c++ - `static_cast<volatile void>` 对优化器意味着什么?

当人们试图在各种库中执行严格的基准测试时,我有时会看到这样的代码:autostd_start=std::chrono::steady_clock::now();for(inti=0;i这里使用volatile来防止优化器注意到被测代码的结果被丢弃,然后丢弃整个计算。当被测代码没有返回值时,说它是voiddo_something(int),然后有时我会看到这样的代码:autostd_start=std::chrono::steady_clock::now();for(inti=0;i(do_something(i+j));autostd_stop=std::chrono::steady_