constexpr相关内容
自C ++ 17起可以使用 constexpr 函数中的lambda表达式。 在相关文档中 用于constexpr lambda的文字 显示此代码示例: constexpr int AddEleven(int n){ return [n] {return n + 11; }(); } 这只是一个玩具示例,用于演示语言功能,还是在实际使用情况下,此代码的行为与以
..
constexpr int hello(int j){ return j * 12; } constexpr int bye(int j = 6){ return j * 12; } int main(){ int i = 6; constexpr int a1 = hello(i); //错误 constexpr int a2 = hello(6); //确定
..
在试图弄清为什么出现某个编译错误的原因时,我想到了以下最小示例: constexpr void Test(bool test) { if(test) return; assert(false); } 我尝试过的每个版本的clang(3.7+)都可以正常编译,但由于gcc失败(测试5-8),所以 错误:调用非'constexpr'函数'vo
..
首先,我正在使用Clang 3.4.1 我正在编写一个全局变量,该变量必须在编译时上下文中充当占位符(主要用作值模板参数)。为此,我编写了一个名为 chameleon 的constexpr类(它模仿任何运行时值的行为): 结构变色龙 { template constexpr运算符T()const { return T {}; } con
..
Scott Meyer的Modern C ++书中的第15项:“尽可能使用constexpr”。他说,您可以标记一个函数constexpr,并且仍然使用编译时未知的值来调用它-在这种情况下,它的行为将与其他任何运行时函数一样,因此,如果可能,您将获得编译时计算的好处但仍可以将其与非编译时间值一起使用。编译器会解决。 但是如果这是真的,那为什么我们不能用constexpr标记每个函数(或者更好的是
..
关于constexpr函数的标准在[decl.constexpr]的第5点指出: 对于非模板,非默认constexpr函数或非模板,非默认,非继承constexpr构造函数,如果不存在参数值,则该函数或构造函数的调用可以作为核心的评估子表达式常量表达式(5.19),程序格式错误;不需要诊断。 下面继续给出以下示例: constexpr int f(bool b){return
..
我试图找出使用 constexpr 创建对象(而不是正常创建对象)是否会提高性能。 这是 constexpr 的代码段。 class Rect { const int a; const float b; public: constexpr Rect(const int a,const float b) :a(a),b(b){} }; int main()
..
如果我在一个翻译单元中使用非默认值初始化 constexpr 变量 foo ,然后进行初始化在另一个翻译单元中的另一个 constexpr 变量 bar 和 foo 是 bar 可能在 foo 之前初始化,从而导致 bar 由零或默认初始化的 foo 初始化。即,与在非constexpr情况下(静态初始化顺序惨败有效)不同,编译器和链接器将分析依赖顺序以保证正确的结果吗? 此外, const
..
我正在尝试编写以下形式的 constexpr 函数: constexpr int foo(bool cond){ int a,b,c; if(cond){ a = 1; b = 2; c = 3; } else { a = -1; b = -2; c = -3; } 返回a + b + c; } 但是,尽管事实是编译器抱怨我使用的
..
出于学习目的,我正在制作自己的String View类,并且尝试将其设置为100%constexpr。 要对其进行测试,我有一个返回哈希值的成员函数。然后,我在switch语句中构造我的字符串视图,并调用相同的成员函数(如果通过),则该成员函数已充分说明其目的。 要学习,使用/阅读/比较我的实现与Visual Studio 2017最新更新 std :: string_view ,但是
..
这是我想做的简化版本。 constexpr float f(float a,float b){ constexpr float temp = a + b; return temp * temp * temp; } 在我的版本中,a + b更为复杂,所以我不知道不想剪切并粘贴三遍。对于实函数,使用3 *(a + b)也不可行。我试图使问题与语法有关,而不与代数有关
..
我想我很理解如何将关键字 constexpr 用于简单的变量类型,但是当涉及到指向值的指针时,我感到困惑。 我想声明一个constexpr C字符串文字,其行为类似于 #定义my_str“你好” 这意味着编译器将C字符串文字插入到我输入此字符串的每个位置符号,我将可以在编译时使用sizeof获得它的长度。 是 constexpr char * const m
..
来自 en.cppreference.com/w/cpp/language/initialization: 无序动态初始化, [sic] 仅适用于(静态/线程本地)类模板静态数据成员和变量模板(自C ++ 14起)未明确专用。 因此,静态模板似乎容易受到 静态初始化顺序惨败(TSIOF) (即翻译单元内无序)。 使用constexpr可以消除此漏洞吗? ie下面的代码保证的
..
我正在尝试使用整数作为类的模板参数。以下是代码示例: template class sample_class { public: std :: array sample_array; } 如果我这样做,它会起作用: sample_class sampl
..
我有以下结构: 结构数据 { std :: string firstMember; std :: string secondMember; std :: string thirdMember; }; 我想在 constexpr中通过字符串名称选择一个成员方式,例如 数据实例; 自动&成员= getMember(instance,“ firstMemb
..
大多数C ++编译器均支持 _mm_cmpeq_epi32 我的问题是此函数未标记为 constexpr ,尽管“从语义上讲”,因为它是一个纯函数,所以没有理由不将该函数设为 constexpr 。 是否存在我可以通过任何方式编写自己的版本(例如) _mm_cmpeq_epi32 就是 constexpr 吗? 很显然,我希望运行时的函数使用正确的as
..
我具有以下帮助函数: template constexpr std :: size_t Length(const T(&)[N]){ return N; } 返回静态数组的长度。在过去,这一直有效,但是当我这样做时: struct Foo { unsigned int temp1 [3] ; v
..
此问题基于 。 目标:我想知道一个类是否具有成员变量 x 。我希望收到 true ,无论此变量是否是 private , public 或受保护的。 方法:如果某个班级有使用以下代码的成员变量: template 结构HasX:std :: false_type {}; 模板 结构H
..
在执行程序之前,编译器如何知道平方根在内存中的哪个位置?我以为每次执行程序时地址都会不同,但这可以起作用: constexpr double(* fp)(double) =& sqrt; cout
..
采用以下法律代码: bool bar(); 模板 constexpr bool foo(T t){ if(t> 0){ return true; } return bar(); } int main(){ // constexpr bool cb1 = foo(-1); //发生预期的错误,因为它将尝试调用bar() constex
..