【发布时间】:2014-04-07 17:02:46
【问题描述】:
B. Stroustrup 在他的新书“TCPL”的第 10.4.3 节中写道:
可以在常量中使用足够简单的用户定义类型 表达。例如:
struct Point { int x,y,z; constexpr Point up(int d) { return {x,y,z+d}; } constexpr Point move(int dx, int dy) { return {x+dx,y+dy}; } // ... };具有 constexpr 构造函数的类称为文字类型。成为 简单到可以是 constexpr,构造函数必须有一个空的主体 并且所有成员必须由潜在常量初始化 表达式。例如:
constexpr 点原点 {0,0};
这让我感到困惑,原因如下:
-
struct Point没有用户定义的构造函数,其隐式默认构造函数也不是 constexpr。 -
constexpr Point origo {0,0};编译是因为标准 (N3337) 中的第 7.1.5/9 段,关于在对象声明中使用constexpr和第 8.5.1/7 段,关于聚合初始化。它与 constexpr 构造函数无关。
【问题讨论】:
-
"也不是它的隐式默认构造函数是 constexpr" 为什么隐式声明(&定义)的默认 ctor 不应该是
constexpr? -
我同意你的第二点:聚合初始化
Point{0,0}中没有构造函数调用。 -
@dyp
Why shouldn't the implicitly-declared (&defined) default ctor be constexpr?成员x、y和z未初始化。 -
现在同意这两点:)
标签: c++ c++11 initialization constexpr