constexpr相关内容

constexpr与静态const:更喜欢哪一个?

对于定义如下整数类型(在函数和类范围)的编译时常量,哪种语法最好? static const int kMagic = 64; //(1) constexpr int kMagic = 64; //(2) (1)对于C ++ 98/03编译器也适用,相反,(2)至少需要C ++ 11。两者之间还有其他区别吗? 编辑 我使用 Godbo ..
发布时间:2020-09-26 23:37:00 C/C++开发

C ++ 17之前/之后的constexpr静态成员

据我所知,一种非常常见的情况是 template class Class { public: static constexpr int I = i; 静态constexpr int J = constexprFunction(i); //进一步的类实现 }; 我通常会看到这个错误(实际上,我的大部分问题是因为我忘记了,不知道,正确的问题是什么 ..
发布时间:2020-09-26 22:33:21 C/C++开发

constexpr函数中的编译时或运行时检测

当在C ++ 11中引入constexpr时,我感到很兴奋,但是不幸的是,我对它的有用性做出了乐观的假设。我假设我们可以在任何地方使用constexpr来捕获文字编译时常量或文字编译时常量的任何constexpr结果,包括以下内容: constexpr float MyMin(constexpr float a,constexpr float b){return a ..
发布时间:2020-09-26 22:30:02 C/C++开发

为什么for循环不是编译时表达式?

如果我想对元组进行迭代,则必须使用疯狂的模板元编程和模板助手专业化。例如,以下程序将不起作用: #include #include #include constexpr auto multiple_return_values() { return std :: make_tuple(3,3.14,“ pi”); ..
发布时间:2020-09-26 22:10:48 C/C++开发

如何声明constexpr extern?

是否可以声明变量 extern constexpr 并将其定义在另一个文件中? 我尝试过但是编译器给出错误: constexpr 变量' i '不是定义 在.h中: extern constexpr int i; in .cpp: constexpr int i = 10; 解决方案 不行,这就是标准说(第7.1.5节): ..
发布时间:2020-09-26 21:58:38 C/C++开发

函数中的静态constexpr变量有意义吗?

如果我在函数内有一个变量(例如,一个大数组),则将其声明为 static 和 constexpr ? constexpr 保证在编译时创建数组,所以 static 会没有用吗? void f(){ 静态constexpr int x [] = { //几千个元素 } ; //使用数组 } 是 static 实际上在生成的代码或语义方面在做什么? 解决方案 答 ..
发布时间:2020-09-26 21:49:31 C/C++开发

constexpr if和static_assert

P0292R1 constexpr(如果已已包含,对于C ++ 17而言,该计划已步入正轨。似乎有用(并且可以替代SFINAE的用法),但是有关错误分支中的 static_assert 格式错误,无需诊断的注释我: 如果不建议在 constexpr的未使用分支中撤消static_assert声明。 void f(){ 如果constexpr(false) static_asser ..
发布时间:2020-09-26 21:45:30 C/C++开发

如果基类包含数组成员,则派生类的构造函数不能为constexpr

我想使用构造函数定义派生类型(SBar)的constexpr值,该构造函数的唯一参数是基类(SFoo)的变量,该变量仅用于初始化基数。 当基类没有数组成员时,这可以正常工作。但是,当我添加一个数组时,派生值将不再是constexpr。但是,基类的简单副本确实会产生constexpr结果。 我已经明确默认所有副本和移动构造函数都是为了安全起见。 test.cpp #defi ..
发布时间:2020-09-24 23:03:04 C/C++开发

Constexpr使用C ++ 17查找数组

我正在尝试编写constexpr查找函数,该函数将返回包含特定值的std :: array的索引。下面的函数似乎可以正常工作,除非包含的类型为 const char * : #include constexpr auto name1(){ 返回“ name1”; } constexpr auto name2(){ 返回“ name2”; } 模板 ..
发布时间:2020-09-24 20:14:05 C/C++开发

__builtin_ctz(0)或__builtin_clz(0)有多不确定?

背景 很长一段时间以来, gcc一直在提供内置位纠缠功能,尤其是尾随和前导0位的数量(也适用于long unsigned和long long unsigned,其后缀为l和ll): —内置功能:int __builtin_clz (unsigned int x) 返回 x中前导0位的数量,从最高有效位开始 位置.如果x为0,则结果不确定. —内置功能:int __built ..
发布时间:2020-09-21 05:21:45 C/C++开发