草庐IT

constexpr-ness

全部标签

c++ - 有没有办法将参数转发给内部 constexpr 函数?

问题:是否可以通过将参数传递给内部constexpr函数(可能使用某种“完美转发”)来计算函数内部的常量表达式?示例:constexprsize_tfoo(charconst*string_literal){return/*somevalidrecursiveblackmagic*/;}voidbar(charconst*string_literal){//worksfineconstexprautoa=foo("Definitelystringliteral.");//compileerror:"string_literal"isnotaconstantexpressionconst

c++ - 丢弃分支中的嵌套 constexpr-if 语句是否仍被评估?

在我看来,另一个constexpr-if语句的丢弃分支内的constexpr-if语句在MSVC(版本15.7.3)中被评估。考虑以下代码:#include#includetemplateinttest(){ifconstexpr(I!=0){return0;}else{//Thisbranchisdiscarded,butitseemsthattheconstexpr-ifbelowisstillevaulated?ifconstexpr(std::is_same_v>>){//someconstexprcheckthatisvalidonlywhenI==0return1;}els

c++ - 我应该尽可能在 C++11 中用 'const int' 替换 'constexpr int' 吗?

你会更换吗constintone=1;constinttwo=2;用这个?constexprintone=1;constexprinttwo=2;我的理解是否正确,这两个block在语义上是相同的,目前只是个人喜好问题?另一方面,正如constexpr暗示const,你可能会争辩说,总是喜欢更严格的形式更一致,即使在它确实如此的微不足道的情况下也是如此没有什么不同?(我理解当允许右边的表达式更复杂时,情况就完全不同了。所以为了澄清,这个问题只关注最简单的表达式是一个固定整数的情况。) 最佳答案 我认为你说const和constexp

c++ - constexpr 连接两个或多个 char 字符串

我正在尝试创建一个constexpr函数,该函数将连接任意数量的char数组,方法是根据Xeo的以下答案进行操作,该答案连接两个char数组。https://stackoverflow.com/a/13294458/1128289#includetemplatestructseq{};templatestructgen_seq:gen_seq{};templatestructgen_seq:seq{};templateconstexprstd::arrayconcat(charconst(&a1)[N1],charconst(&a2)[N2],seq,seq){return{{a1[I

c++ - 函数返回 constexpr 不编译

为什么不编译:将string作为返回类型会不会有问题?constexprstd::stringfnc(){returnstd::string("Yaba");} 最佳答案 采用指向char的指针的std::string的构造函数不是constexpr。在constexpr函数中,您只能使用constexpr的函数。 关于c++-函数返回constexpr不编译,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.

c++ - clang 提示 constexpr 函数以防 switch 语句

structX{enumclassE{A,B};staticconstexprXA(){returnX{E::A};}staticconstexprXB(){returnX{E::B};}constexproperatorE()const{returna;}Ea;};templatestructY{voidf(){//withoutthislineclangerrs//constauto&x=this->x;switch(x){caseX::A():caseX::B():default:return;}}Xx=X::A();};intmain(){Y{}.f();}如果片段中没有标记行

c++ - 如何在 C++ 中将 static_assert 用于 constexpr 函数参数?

我的库中有几个简短的constexpr函数可以执行一些简单的计算。我在运行时和编译时上下文中都使用它们。我想在这些函数的主体中执行一些断言,但是assert(...)在constexpr函数和static_assert中无效(...)不能用于检查函数参数。例子:constexprintgetClamped(intmValue,intmMin,intmMax)noexcept{assert(mMinmMax?mMax:mValue);}有没有办法检查函数是否在运行时或编译时常量中执行,并且仅当它在运行时执行时才执行断言-时间?constexprintgetClamped(intmValu

c++ - constexpr 问题,为什么这两个不同的程序在 g++ 中运行的时间如此不同?

我正在使用gcc4.6.1并得到一些有趣的行为,涉及调用constexpr函数。该程序运行良好,并立即打印出12200160415121876738。#includeexternconstunsignedlongjoe;constexprunsignedlongfib(unsignedlongintx){return(x这个程序需要很长时间才能运行,我从来没有耐心等待它打印出一个值:#includeconstexprunsignedlongfib(unsignedlongintx){return(x为什么会有这么大的差异?我在第二个程序中做错了吗?编辑:我在64位平台上使用g++-st

c++ - 尽可能多地维护 "const-ness"是个好主意吗?

最近,我一直在养成一种习惯,将我的代码中的许多东西作为const:(1)函数参数,我知道永远不会改变。例如:voidfoo(constinti,conststrings)^^^^^^^^^^(2)返回类型作为const。例如:structA{...constintfoo(){return...;}^^^^^operatorconstbool()const{return...;}^^^^^};(3)整数或字符串的简单计算。例如:constuintsize=vec.size();^^^^^conststrings2=s1+"hello";^^^^^...还有其他一些地方。通常在其他现实世界

c# - 关于 Endian-ness 和 .Net 的详细信息?

我有几个关于字节序的问题,这些问题足够相关,我保证将它们作为一个问题提出:1)字节顺序是由.Net还是硬件决定的?2)如果是由硬件决定的,我如何在C#中找出硬件的字节序?3)endian-ness是否影响二进制交互,例如OR、AND、XOR或移位?IE。向右移位一次是否总是移出最低有效位?4)我对此表示怀疑,但是不同版本的.Net框架在字节顺序上是否存在差异?我假设它们都是一样的,但我已经学会停止假设一些较低级别的细节,例如这个。如果需要,我可以将这些问题作为不同的问题提出,但我认为知道其中一个问题答案的任何人都可能知道所有问题的答案(或者可以为我指出一个好的方向)。