constexpr相关内容
我很难理解这段代码(来自C ++ 14草案标准 [conv.lval] 的示例)如何调用未定义的行为 g(false)。为什么 constexpr 使程序有效? 此外,“不访问 yn “?在 g()的两个调用中,我们返回了 n 数据成员为什么最后一行说' t访问它? struct S {int n; }; auto f(){ S x {1}; constexpr S y {
..
struct Test { static const int value = []() - > int {return 0; }(); }; 使用gcc-4.6,我得到类似于错误:function需要constexpr 。我尝试了多种组合在 constexpr 在各个地方,但没有运气。 是 constexpr 也支持lambda函数(不管 return 是否指
..
假设我有一些constexpr函数f: constexpr int f(int x){...} 在编译时我有一些const int N: #define N ...; 或 const int N = ...; 我想有一个int数组X: int X [N] = {f(0),f f(2),...,
..
C ++ 11允许使用 constexpr 说明符声明的函数在常量表达式(如模板参数)中使用。对于允许 constexpr 有严格的要求;基本上这样的函数只封装一个子表达式而不包含其他。 (编辑:这是放宽在C ++ 14,但问题是。) 为什么要求关键字? 获得的是什么? 它有助于揭示接口的意图,但它不会通过保证函数在常量表达式中可用来验证该意图。写入 constexpr 函数后,程序员
..
给定以下代码: struct A {static constexpr int a [3] = {1,2,3} ; }; int main(){ int a = A :: a [0]; int b [A :: a [1]]; } 是 A :: a 必须 odr使用 int a = A :: a [0] ? 注意:此问题表示
..
我正在努力升级一些C ++代码以利用C ++ 11中的新功能。我有一个trait类与几个函数返回基本类型,这在大多数时候,但不总是,返回一个常量表达式。我想根据函数是否 constexpr 做不同的事情。我想出了以下方法: template struct test { template s
..
我想在编译时计算字符串文字的长度。为此,我使用以下代码: #include
..
我想要创建一个坐标查找表,例如: int a [n] = {{0,1},{2,3},...} n ,将在编译时创建。我开始寻找 constexpr ,但似乎是一个函数返回一个 constexpr std :: vector > 不是一个选项,因为我得到: 无效的返回类型'std :: vector
..
请考虑下面的代码: struct foo { static constexpr const void * ptr = reinterpret_cast(0x1); }; auto main() - > int { return 0;上面的例子在g ++ v4.9()中编译正确, http://coliru.stacked-crooked.com/
..
如何在 constexpr 函数中正确执行 static_assert 例如: constexpr int do_something(int x) { static_assert(x& “x must be> 0”); return x + 5; } 这不是有效的C ++ 11代码,因为constexpr函数必须包含返回语句。我不认为标准有一个例外,虽然,GCC
..
你好,我在学习C ++ 11,我想知道如何使一个constexpr 0到n数组,例如: n = 5; int array [] = {0 ... n}; 所以数组可以是 {0,1,2,3,4, 5} 解决方案 与您对问题的意见中的答案不同, #include template
..
以下定义之间有区别吗? const double PI = 3.141592653589793; constexpr double PI = 3.141592653589793; 如果不是,C ++ 11中首选哪种样式? 解决方案 我相信有区别。让我们重命名它们,以便我们可以更容易地谈论它们: const double PI1 = 3.1415926
..
在我看来,有一个“总是返回5的函数”打破或稀释“调用函数”的含义。必须有一个原因,或者需要这个能力,否则它不会在C ++ 11中。为什么会有? //预处理器。 #define MEANING_OF_LIFE 42 //常量: const int MeaningOfLife = 42; // constexpr-function: constexpr int Mean
..
因为可能在运行时调用一个声明为constexpr的函数,编译器根据哪个标准决定是在编译时还是在运行时计算它? 模板 constexpr base_t POW(base_t base,expo_t expo) { return(expo!= 0)? base * POW(base,expo -1):1; }
..
我想在我的类中有一个 static const char 数组。 GCC抱怨并告诉我应该使用 constexpr ,虽然现在告诉我这是一个未定义的引用。如果我使数组非成员,那么它编译。发生了什么? // .hpp struct foo { void bar static constexpr char baz [] =“quz”; }; // .cpp void fo
..
我正在研究核心常量表达式* 中允许的内容, 段落中的 jtc1 / sc22 / wg21 / docs / papers / 2012 / n3485.pdf“>草案C ++标准,其中说: 条件表达式是一个核心常量表达式,除非它包含以下之一作为潜在求值的子表达式(3.2),但未评估的逻辑AND(5.14),逻辑OR(5.15)和条件(5.16)操作的子表达式不考虑[注意:重载操作符调用一个
..
constexpr 和 const 之间有什么区别? 我什么时候只能使用其中一个? 我什么时候可以同时使用,我应该如何选择? 解决方案 基本含义和语法 这两个关键字都可以用于对象声明以及函数。应用到对象时的基本区别是: const 声明一个对象为常量。这意味着保证,一旦初始化,该对象的值不会改变,并且编译器可以利用这个事实进行优化。 constexpr c $ c
..
时,可以在constexpr使用boost数学常数? 例如,下面一行: 静态constexpr双SEC3 =的static_cast<双>(45)/ 180 *提振::数学:: double_constants :: PI; 给我误差错误 - constexpr变量“SEC3”必须由一个常数前pression初始化 但是,如果我更换增压code。与简单M_PI,它工作正常
..
我有一个字符串与超出我的控制(例如一个的#define 在的config.h 文件),我想初始化一个全球固定大小的字符数组它。如果字符串太长,我希望它被截断。 基本上,我想实现的是效果 的#define SomeText“则会Lorem存有” 的#define LIMIT 8字符文本[LIMIT + 1]; 的std ::函数strncpy(文字,SOMETEXT,LIMIT); 文[LIMI
..
GCC 和锵做编译下面code: 无效测试() { constexpr INT大小= 3; 自动波长= [尺寸] {INT昏暗【尺寸】; }; } 然而,的VisualStudio 2015年CTP 6 没有。不过,所有3编译器很高兴与此code:无效测试() { 静态constexpr INT大小= 3; 自动波长= [] {INT昏暗【尺寸】; }; } 这片
..