【发布时间】:2011-11-29 08:52:43
【问题描述】:
阅读slides about constexpr 时,介绍是关于“令人惊讶的使用 consts 进行动态初始化”。例子是
struct S {
static const int c;
};
const int d = 10 * S::c;
const int S::c = 5;
唉,音轨不见了,笔记也不见了,所以我只能猜测这里的意思。
d 被“令人惊讶地”动态初始化是否正确,因为 S::c 是在 dd 之前定义的?声明 S::c 的em> 在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 或两者兼而有之?
【问题讨论】:
-
静态成员可以在源文件的任何地方声明。
-
我怀疑
d在幻灯片中展示的情况下是0,好像我正确地记得静态内存在设置为预期值之前是0初始化的。 -
@vivek declaration 的位置是固定的,但初始化的位置不是。虽然我也觉得这对静态常量很重要,但我们必须记住 C++ 不是 Haskell。
-
@vivik:当然可以。但我认为你的意思是“定义”,是吗?即便如此,这与我关于 static 或 dynamic 初始化的问题无关......
-
@leftaroundabout: ...但是有了
constexpr,它几乎变成了它;-)
标签: c++ initialization constants c++11 constexpr