constexpr相关内容

从函数返回lambda表达式的返回值有什么意义?

自C ++ 17起可以使用 constexpr 函数中的lambda表达式。 在相关文档中 用于constexpr lambda的文字 显示此代码示例: constexpr int AddEleven(int n){ return [n] {return n + 11; }(); } 这只是一个玩具示例,用于演示语言功能,还是在实际使用情况下,此代码的行为与以 ..
发布时间:2020-10-08 18:35:37 C/C++开发

constexpr函数及其参数

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); //确定 ..
发布时间:2020-10-08 18:35:33 C/C++开发

在constexpr函数中声明

在试图弄清为什么出现某个编译错误的原因时,我想到了以下最小示例: constexpr void Test(bool test) { if(test) return; assert(false); } 我尝试过的每个版本的clang(3.7+)都可以正常编译,但由于gcc失败(测试5-8),所以 错误:调用非'constexpr'函数'vo ..
发布时间:2020-10-08 18:35:29 C/C++开发

Constexpr类:继承?

首先,我正在使用Clang 3.4.1 我正在编写一个全局变量,该变量必须在编译时上下文中充当占位符(主要用作值模板参数)。为此,我编写了一个名为 chameleon 的constexpr类(它模仿任何运行时值的行为): 结构变色龙 { template constexpr运算符T()const { return T {}; } con ..
发布时间:2020-10-08 18:35:26 C/C++开发

为什么C ++在不让我们编写标记的情况下不能自动找出何时使用constexpr?

Scott Meyer的Modern C ++书中的第15项:“尽可能使用constexpr”。他说,您可以标记一个函数constexpr,并且仍然使用编译时未知的值来调用它-在这种情况下,它的行为将与其他任何运行时函数一样,因此,如果可能,您将获得编译时计算的好处但仍可以将其与非编译时间值一起使用。编译器会解决。 但是如果这是真的,那为什么我们不能用constexpr标记每个函数(或者更好的是 ..
发布时间:2020-10-08 18:34:23 C/C++开发

[decl.constexpr] .5到底是什么意思?

关于constexpr函数的标准在[decl.constexpr]的第5点指出: 对于非模板,非默认constexpr函数或非模板,非默认,非继承constexpr构造函数,如果不存在参数值,则该函数或构造函数的调用可以作为核心的评估子表达式常量表达式(5.19),程序格式错误;不需要诊断。 下面继续给出以下示例: constexpr int f(bool b){return ..
发布时间:2020-10-08 18:34:19 C/C++开发

用于创建对象的Constexpr

我试图找出使用 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() ..
发布时间:2020-10-08 18:34:18 C/C++开发

是“静态初始化命令惨败”吗?对constexpr变量的关注?

如果我在一个翻译单元中使用非默认值初始化 constexpr 变量 foo ,然后进行初始化在另一个翻译单元中的另一个 constexpr 变量 bar 和 foo 是 bar 可能在 foo 之前初始化,从而导致 bar 由零或默认初始化的 foo 初始化。即,与在非constexpr情况下(静态初始化顺序惨败有效)不同,编译器和链接器将分析依赖顺序以保证正确的结果吗? 此外, const ..
发布时间:2020-10-08 18:34:12 C/C++开发

延迟局部变量初始化的constexpr函数

我正在尝试编写以下形式的 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; } 但是,尽管事实是编译器抱怨我使用的 ..
发布时间:2020-10-08 18:34:08 C/C++开发

如何制作constexpr交换函数?

出于学习目的,我正在制作自己的String View类,并且尝试将其设置为100%constexpr。 要对其进行测试,我有一个返回哈希值的成员函数。然后,我在switch语句中构造我的字符串视图,并调用相同的成员函数(如果通过),则该成员函数已充分说明其目的。 要学习,使用/阅读/比较我的实现与Visual Studio 2017最新更新 std :: string_view ,但是 ..
发布时间:2020-10-08 18:34:07 C/C++开发

我如何在constexpr函数中有一个临时变量?

这是我想做的简化版本。 constexpr float f(float a,float b){ constexpr float temp = a + b; return temp * temp * temp; } 在我的版本中,a + b更为复杂,所以我不知道不想剪切并粘贴三遍。对于实函数,使用3 *(a + b)也不可行。我试图使问题与语法有关,而不与代数有关 ..
发布时间:2020-10-08 18:32:59 C/C++开发

如何声明constexpr C字符串?

我想我很理解如何将关键字 constexpr 用于简单的变量类型,但是当涉及到指向值的指针时,我感到困惑。 我想声明一个constexpr C字符串文字,其行为类似于 #定义my_str“你好” 这意味着编译器将C字符串文字插入到我输入此字符串的每个位置符号,我将可以在编译时使用sizeof获得它的长度。 是 constexpr char * const m ..
发布时间:2020-10-08 18:32:53 C/C++开发

是否保证constexpr(即常量初始化)模板变量的初始化顺序?

来自 en.cppreference.com/w/cpp/language/initialization: 无序动态初始化, [sic] 仅适用于(静态/线程本地)类模板静态数据成员和变量模板(自C ++ 14起)未明确专用。 因此,静态模板似乎容易受到 静态初始化顺序惨败(TSIOF) (即翻译单元内无序)。 使用constexpr可以消除此漏洞吗? ie下面的代码保证的 ..

在C ++中模拟编译时反射

我有以下结构: 结构数据 { std :: string firstMember; std :: string secondMember; std :: string thirdMember; }; 我想在 constexpr中通过字符串名称选择一个成员方式,例如 数据实例; 自动&成员= getMember(instance,“ firstMemb ..
发布时间:2020-10-08 18:32:41 C/C++开发

Constexpr和SSE内在函数

大多数C ++编译器均支持 _mm_cmpeq_epi32 我的问题是此函数未标记为 constexpr ,尽管“从语义上讲”,因为它是一个纯函数,所以没有理由不将该函数设为 constexpr 。 是否存在我可以通过任何方式编写自己的版本(例如) _mm_cmpeq_epi32 就是 constexpr 吗? 很显然,我希望运行时的函数使用正确的as ..
发布时间:2020-10-08 18:32:33 C/C++开发