我希望以下代码会产生分段错误(或其他 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静态全局避免了静态初始化顺序惨败。我不同意,但现在我不太确定......