草庐IT

constexpr-ness

全部标签

c++ - 体系结构 x86_64 链接 constexpr std::array 的 undefined symbol

我在链接目标文件时遇到错误:#include#includeenumSystemType:uint8_t{AC,DC,HCP,EFF};templatestructSystem;templatestructSystem{public:staticconstexprsize_tnumber_of_sockets=2;staticconstexprstd::arrayobject_per_socket{{12,6}};};我如下使用它来将数据分配到vector中。terminal->no_obj_per_system.assign(Sytem::object_per_socket.begi

c++ - 如果 constexpr 而不是标签分派(dispatch)

我想使用ifconstexpr而不是标签调度,但我不确定如何使用它。下面的示例代码。templatestructMyTag{staticconstintSupported=0;};templatestructMyTag{staticconstintSupported=1;};templatestructMyTag{staticconstintSupported=1;};classMyTest{public:templatevoiddo_something(Tvalue){//insteadofdoingthisboolsupported=MyTag::Supported;//Iwant

c++ - 无法编译包含 "if constexpr"的函数模板实例化

抱歉标题含糊不清,但我想不出更好的标题。我写了一个函数来压扁容器:templatevoidflatten(constContainer&container,OutItres){ifconstexpr(std::is_convertible_v::value_type>){for(constauto&value:container){*res=value;++res;}}else{for(constauto&subContainer:container)flatten(subContainer,res);}}我希望它像这样使用:vector>test={{1},{2,3,4},{5,6}

c++ - constexpr 上下文中 constexpr 函数内的所有函数是否都必须是 constexpr 函数?

在ubuntugcc8.0中:voidbar(){}constexprintfoo(inta){if(a但是在下面的测试中:intmain(){inta2[foo(1)];//nocompileerror}这里,bar是非constexpr函数。我想知道为什么在constexpr上下文中允许非constexpr函数,尽管在此测试中它没有被调用。 最佳答案 doesallthefunctionsinsideaconstexprfunctioninconstexprcontextmustbeconstexprfunction?视情况而定

c++ - 泰勒级数展开为 constexpr

我正在尝试使用泰勒级数展开构建一个简单的sine函数,该函数可以在编译时使用C++14constexpr进行计算。我的代码正在编译,但编译器没有生成常量。正弦定义如下:templateconstexprTsine(Tx){Tresult=x;for(inti=1;i(-1,i)*power(x,1+2*i)/factorial(1+2*i);returnresult;}如果需要,我可以提供power和factorial的代码。它们很简单,而且constexpr。我在这样的循环中调用sine:templatevoidtest(double*out){for(inti=0;i(i*M_PI

c++ - constexpr decltype

我最近在这里(DetectinginstancemethodconstexprwithSFINAE)问了一个问题,我试图在编译时做一些constexpr检测。最终,我发现可以利用noexcept来做到这一点:任何常量表达式也是noexcept。所以我组装了以下机器:templateconstexprintmaybe_noexcept(T&&t){return0;}...constexprboolb=noexcept(maybe_noexcept(int{}));这行得通并且b正如您所期望的那样为真,因为对int进行零初始化是一个常量表达式。它也应该正确地产生零(如果我将int更改为其他

c++ - 在包扩展期间如何使用 constexpr 函数?

我想做以下事情://haveaconstexprfunctiontemplateconstexprTsquare(Tconsti){returni*i;}//transformastd::integer_sequencebycallingtheconstexprfunctiononeveryintegertemplatestaticconstexprautomake_type(Fnfn,std::integer_sequence){returnstd::integer_sequence{};}//sothatIcanuseitlikesousingtype=decltype(make_

c++ - 编译器可以决定函数的 noexcept'ness 吗?

举个例子classX{intvalue;public:X(intdef=0):value(def){}voidadd(inti){value+=i;}};显然,函数voidX::add(int)永远不会抛出任何异常。我的问题是,编译器能否分析代码并决定不生成机器代码来处理异常,即使该函数未标记为noexcept? 最佳答案 如果编译器可以证明一个函数永远不会抛出异常,则“As-If”规则(§1.9,C++标准的“程序执行”)允许删除处理异常的代码。但是,无法确定一个函数是否永远不会抛出一般情况,因为这相当于解决了停机问题。

c++ - 如果在 C++14 或更高版本上,不是 const 的成员函数只能是 constexpr

在C++11中,成员函数上的constexpr意味着const。这在C++14中有所改变。我有一些代码有一个成员函数,它应该是constexpr,但不能是const,所以如果用stdc++14或更高版本编译,我希望它是constexpr。一种方法是:classFoo{#if_cplusplus>=201402Lconstexpr#endifintbaz(constBar&bar);};有没有更好的表达方式,最好不用预处理器? 最佳答案 最好的方法是利用功能测试宏,作为SD-6的一部分.constexpr成员函数不是隐式const的更

c++ - 我应该像这样使用 constexpr 吗?

我有这个非常简单的函数,我有一些值需要计算,但只计算一次,最好的时间是在编译时。这些值只在这个函数中很重要。这是对constexpr的良好使用还是我应该将它们声明为静态常量?ps我知道性能差异很小以至于无关紧要,但我想以“正确的”c++11方式进行。voidMainWindow::UpdateDateTimes(){//forsomedumbreasonDateTimeonlyhasaddsecondsmethod//sowehavetocalculatethesecondsperhourandthenumberofhours//wedothiswithstaticconstantva