我希望以下代码会产生分段错误(或其他 UB):
struct T {
T();
};
T t;
char const* str = "Test string";
T::T() {
std::cout << str; // zero-initialised, only!
}
int main() {}
那是因为t
在str
. 由于零初始化,我希望str
保持该值。(char const*)0
我的解释[C++11: 3.6.2/2]
支持这一点。
但是,上面的代码片段似乎按预期输出了字符串(我还通过打印指针的值来确认行为)。
是否有一些我在这里遗漏的静态初始化规则,允许在开始构建str
之前进行值初始化?t
它在标准中的什么位置?
这在构建时出现在静态变量解析上,其中一个回答者断言使用char const*
而不是std::string
静态全局避免了静态初始化顺序惨败。我不同意,但现在我不太确定......