在阅读有关 constexpr 的幻灯片时,介绍是关于“使用 consts 的令人惊讶的动态初始化”。例子是
struct S {
static const int c;
};
const int d = 10 * S::c;
const int S::c = 5;
唉,音轨不见了,笔记也不见了,所以我只能猜测这里的意思。
d
动态初始化“令人惊讶”是否正确,因为之前S::c
定义过 d
?is before的声明可能还不够,编译器需要完整的定义,对吧?S::c
d
也就是说,我怀疑,在下面的例子中d
会被静态初始化吗?
struct S {
static const int c;
};
const int S::c = 5;
const int d = 10 * S::c; // now _after_ defn of S::c
为了获得蛋糕,在 C++11 中,完全静态初始化需要什么?constexpr
S::c
,d
或两者兼而有之?