草庐IT

add_compiler_flags

全部标签

c++ - 作为类成员的可变大小数组 : why does it compile?

我有这种情况,我无法解释它编译的原因:#includeusingnamespacestd;classX{public:X(){cout我正在定义一个可变大小的X数组作为类Y的成员。在类外这样定义X肯定会导致编译错误,但在类内不会。更重要的是,X的构造函数从未被调用。那么这里发生了什么? 最佳答案 C99,6.7.2.1/16(n1256)Asaspecialcase,thelastelementofastructurewithmorethanonenamedmembermayhaveanincompletearraytype;thi

c++ - [C++ 编译时断言] : Can we throw a compilation error if some condition is not met?

我写了一个函数:templatevoidtryHarder(){for(inti=0;i但我只希望它在N介于0和10之间时编译。我可以这样做吗?怎么办? 最佳答案 您可以使用static_assertdeclaration来完成:templatevoidtryHarder(){static_assert(N>=0&&N此功能仅在C++11之后可用。如果您坚持使用C++03,请查看Boost'sstaticassertmacro.整个想法都是很好的错误信息。如果您不关心这些,或者甚至负担不起boost,您可以执行以下操作:templa

C++ : Can the compiler optimize this code segment?

voidfoo(constintconstant){for(inti=0;i外循环的每次执行都会检查“constant”的值。然而,常量永远不会改变,所以大量的CPU时间被浪费在测试条件常量我个人认为这个问题是不可避免的。即使编译器将比较放在外循环之前并设置某种bool变量“skip_inner_stuff”,仍然必须在外循环的每次传递中检查该变量。您对此事有何看法?是否有更有效的方法来编写上述代码段来避免该问题? 最佳答案 您描述的优化也称为loopunswitching.多年来,它一直是优化编译器的标准部分-但如果您想确保编译器

c++ - 使用 ATOMIC_FLAG_INIT 和 std::atomic_flag::clear 有什么区别

下面两段代码是否相同:std::atomic_flaglock=ATOMIC_FLAG_INIT;和std::atomic_flaglock;lock.clear();似乎第二个可以允许点击几下锁定处于未知状态第一个代码片段是否始终具有已知状态? 最佳答案 ATOMIC_FLAG_INIT是一个实现定义的宏,保证可以像您发布的那样在表达式中工作。例如,它可以方便地初始化您可能在命名空间范围内定义的atomic_flag。它还保证标志将被清除,并且如果标志本身具有静态存储持续时间,则初始化也将是静态的。第二组语句是初始化,然后清除标志

kotlin - 在 Kotlin Set 接口(interface)中调用 add 方法时 Unresolved 引用错误

如果我使用Set接口(interface)引用并尝试调用add方法,则会收到Unresolved引用错误:funmain(args:Array){valset=HashSet()set.add(Integer(1))//OKvalseti:Set=HashSet()seti.add(Integer(2))//FAILING:Unresolvedreferencetoadd**}我不明白这种行为。JavaSet接口(interface)有一个add方法,我希望Kotlin接口(interface)是一个扩展版本,而不是更少的方法。PD1:我在IdeaIDE或使用gradle构建时遇到同样

kotlin - 在 Kotlin Set 接口(interface)中调用 add 方法时 Unresolved 引用错误

如果我使用Set接口(interface)引用并尝试调用add方法,则会收到Unresolved引用错误:funmain(args:Array){valset=HashSet()set.add(Integer(1))//OKvalseti:Set=HashSet()seti.add(Integer(2))//FAILING:Unresolvedreferencetoadd**}我不明白这种行为。JavaSet接口(interface)有一个add方法,我希望Kotlin接口(interface)是一个扩展版本,而不是更少的方法。PD1:我在IdeaIDE或使用gradle构建时遇到同样

c++ - 什么时候应该使用 remove_reference 和 add_reference?

我正在查看[VC10的]unique_ptr,它们做了一些我不明白的事情:typedeftypenametr1::remove_reference::type_Dx_noref;_Dx_noref&get_deleter(){//returnreferencetodeleterreturn(_Mydel);}unique_ptr(pointer_Ptr,typename_If::value,_Dx,consttypenametr1::remove_reference::type&>::_Type_Dt):_Mybase(_Ptr,_Dt){//constructwithpointera

c++ - 在 boost::python 的 add_property 中使用 c++11 lambda 作为访问函数(get_signature 因 lambda 而失败)

我正在尝试使用C++11lambda作为boost::python中的访问函数的add_property,以下内容(此示例中并不严格需要lambda,但lambda内部发生的更复杂的事情将需要它,例如验证):#includestructA{A():a(2){};inta;};BOOST_PYTHON_MODULE(boost_python_lambda){boost::python::class_("A")//.def_readonly("a",&A::a)//theclassicalway:worksfine.add_property("a",[](constA&a){returna

c++ - Visual Studio : compile list of modules on each platform and configuration

我正在从事一个巨大的C++项目,该项目针对许多平台,每个平台都有多种配置。由于编译时间长,在每个平台上构建整个项目以测试更改是否成功编译不是一种选择。我通常做的是编译我在不同平台/配置组合上修改的单个cpp模块。我想自动执行此过程,无论是使用脚本、VS扩展还是其他任何方式,我都愿意评估不同的选项。我真正需要的是为每个平台和每个配置获取一个cpp文件列表并编译每个文件(基本上遍历配置管理器的所有组合)。这可能吗?关于如何解决这个问题有什么好的建议吗?编辑:我知道这远不是一个完美的解决方案,并且只会发现一部分错误。我仍将不得不面对链接错误、其他cpp单元上的编译器错误取决于修改后的head

c++ - add_lvalue_reference 有什么作用?

我有这样一个类,它为montecarlo模拟器创建路径,它需要从可用整数数组创建整数路径。因此,例如,我们可以从包含{0,1,2,3,4}的数组中提取长度为3的路径,这将生成3,1,2和1,4,0​​。//ThispathgeneratorjustgeneratesalistofintsforeachpathtemplateclassMCPathGen{public:typedefvectormcpath_t;typedefrandgenrandgen_t;typedeftypenameadd_lvalue_reference::typerandgen_ref_t;MCPathGend