constexpr相关内容

了解关于左值到右值转换的示例

我很难理解这段代码(来自C ++ 14草案标准 [conv.lval] 的示例)如何调用未定义的行为 g(false)。为什么 constexpr 使程序有效? 此外,“不访问 yn “?在 g()的两个调用中,我们返回了 n 数据成员为什么最后一行说' t访问它? struct S {int n; }; auto f(){ S x {1}; constexpr S y { ..
发布时间:2016-10-11 23:20:37 C/C++开发

constexpr是否支持lambda函数/表达式?

struct Test { static const int value = []() - > int {return 0; }(); }; 使用gcc-4.6,我得到类似于错误:function需要constexpr 。我尝试了多种组合在 constexpr 在各个地方,但没有运气。 是 constexpr 也支持lambda函数(不管 return 是否指 ..
发布时间:2016-10-11 23:18:09 C/C++开发

为什么我们需要将函数标记为constexpr?

C ++ 11允许使用 constexpr 说明符声明的函数在常量表达式(如模板参数)中使用。对于允许 constexpr 有严格的要求;基本上这样的函数只封装一个子表达式而不包含其他。 (编辑:这是放宽在C ++ 14,但问题是。) 为什么要求关键字? 获得的是什么? 它有助于揭示接口的意图,但它不会通过保证函数在常量表达式中可用来验证该意图。写入 constexpr 函数后,程序员 ..
发布时间:2016-10-11 22:41:30 C/C++开发

使用SFINAE检测constexpr

我正在努力升级一些C ++代码以利用C ++ 11中的新功能。我有一个trait类与几个函数返回基本类型,这在大多数时候,但不总是,返回一个常量表达式。我想根据函数是否 constexpr 做不同的事情。我想出了以下方法: template struct test { template s ..
发布时间:2016-10-11 22:36:37 C/C++开发

使用constexpr查找表

我想要创建一个坐标查找表,例如: int a [n] = {{0,1},{2,3},...} n ,将在编译时创建。我开始寻找 constexpr ,但似乎是一个函数返回一个 constexpr std :: vector > 不是一个选项,因为我得到: 无效的返回类型'std :: vector ..
发布时间:2016-10-11 22:19:23 C/C++开发

const vs constexpr on variables

以下定义之间有区别吗? const double PI = 3.141592653589793; constexpr double PI = 3.141592653589793; 如果不是,C ++ 11中首选哪种样式? 解决方案 我相信有区别。让我们重命名它们,以便我们可以更容易地谈论它们: const double PI1 = 3.1415926 ..
发布时间:2016-10-11 21:33:15 C/C++开发

什么时候应该在C ++ 11中使用constexpr能力?

在我看来,有一个“总是返回5的函数”打破或稀释“调用函数”的含义。必须有一个原因,或者需要这个能力,否则它不会在C ++ 11中。为什么会有? //预处理器。 #define MEANING_OF_LIFE 42 //常量: const int MeaningOfLife = 42; // constexpr-function: constexpr int Mean ..
发布时间:2016-10-11 21:19:41 C/C++开发

未定义的引用static constexpr char []

我想在我的类中有一个 static const char 数组。 GCC抱怨并告诉我应该使用 constexpr ,虽然现在告诉我这是一个未定义的引用。如果我使数组非成员,那么它编译。发生了什么? // .hpp struct foo { void bar static constexpr char baz [] =“quz”; }; // .cpp void fo ..
发布时间:2016-10-11 20:48:20 C/C++开发

为什么常量表达式有未定义行为的排除?

我正在研究核心常量表达式* 中允许的内容, 段落中的 jtc1 / sc22 / wg21 / docs / papers / 2012 / n3485.pdf“>草案C ++标准,其中说: 条件表达式是一个核心常量表达式,除非它包含以下之一作为潜在求值的子表达式(3.2),但未评估的逻辑AND(5.14),逻辑OR(5.15)和条件(5.16)操作的子表达式不考虑[注意:重载操作符调用一个 ..
发布时间:2016-10-11 20:25:56 C/C++开发

`constexpr`和`const`之间的区别

constexpr 和 const 之间有什么区别? 我什么时候只能使用其中一个? 我什么时候可以同时使用,我应该如何选择? 解决方案 基本含义和语法 这两个关键字都可以用于对象声明以及函数。应用到对象时的基本区别是: const 声明一个对象为常量。这意味着保证,一旦初始化,该对象的值不会改变,并且编译器可以利用这个事实进行优化。 constexpr c $ c ..
发布时间:2016-10-11 20:18:41 C/C++开发

在constexpr使用boost数学常数

时,可以在constexpr使用boost数学常数? 例如,下面一行: 静态constexpr双SEC3 =的static_cast<双>(45)/ 180 *提振::数学:: double_constants :: PI; 给我误差错误 - constexpr变量“SEC3”必须由一个常数前pression初始化 但是,如果我更换增压code。与简单M_PI,它工作正常 ..
发布时间:2016-08-12 18:40:13 C/C++开发

截断在编译时的String

我有一个字符串与超出我的控制(例如一个的#define 在的config.h 文件),我想初始化一个全球固定大小的字符数组它。如果字符串太长,我希望它被截断。 基本上,我想实现的是效果 的#define SomeText“则会Lorem存有” 的#define LIMIT 8字符文本[LIMIT + 1]; 的std ::函数strncpy(文字,SOMETEXT,LIMIT); 文[LIMI ..
发布时间:2016-06-03 10:13:42 C/C++开发

使用lambda捕捉constexpr值作为数组维

GCC 和锵做编译下面code: 无效测试() { constexpr INT大小= 3; 自动波长= [尺寸] {INT昏暗【尺寸】; }; } 然而,的VisualStudio 2015年CTP 6 没有。不过,所有3编译器很高兴与此code:无效测试() { 静态constexpr INT大小= 3; 自动波长= [] {INT昏暗【尺寸】; }; } 这片 ..
发布时间:2016-06-02 22:35:13 其他开发