相关疑难解决方法(0)

内置类型的对象是否具有特殊的静态初始化顺序优先级?

我预计以下代码会产生分段错误(或其他UB):

struct T {
   T();
};

T t;
char const* str = "Test string";

T::T() {
   std::cout << str; // zero-initialised, only!
}

int main() {}
Run Code Online (Sandbox Code Playgroud)

那是因为t之前已经初始化了str.我期望由于零初始化而str保持该值(char const*)0.我的解释[C++11: 3.6.2/2]支持这一点.

但是,上面的代码片段似乎按预期输出了字符串(我也通过打印指针的值来确认行为).

我是否缺少一些静态初始化规则,允许strt开始构建之前进行值初始化?标准在哪里?


在构建时出现了静态变量解析,其中一个回答者断言使用char const*而不是std::string静态全局避免了静态初始化顺序惨败.我不同意,但现在我不太确定......

c++ static-initializer

6
推荐指数
2
解决办法
239
查看次数

标签 统计

c++ ×1

static-initializer ×1