【发布时间】:2016-04-12 03:40:32
【问题描述】:
如果我有一些静态初始化的变量(在main 开始之前),我是否可以随意使用这些构造函数中的任何内置内容,例如<iostream> 或<vector>?
“静态初始化顺序失败”的发生是因为静态变量的初始化顺序(在不同的翻译单元中)未定义。
如果是良性的,比如
std::cout << "Hello" << std::endl;
碰巧依赖<iostream> 中的一些静态变量被提前初始化? (我不是说确实如此,但假设确实如此。)内置库中的这些静态变量在我自己的静态变量之前初始化是什么意思?就像里面说"Person.cpp" 或其他什么。
编辑: Is std::cout guaranteed to be initialized? 被建议作为此问题的副本。但是,我认为我的问题范围更广,因为它询问的是 any 标准内置库,而不仅仅是 <iostream>。
【问题讨论】:
-
我怀疑你必须为每个对象做出决定。我的猜测是标准库中的任何对象都在动态初始化开始之前被初始化,但这只是一个猜测。
-
为什么你认为
vector有什么静态的东西要初始化? -
@underscore_d 我从没说过。它可能没有。但我不确定。 (无论是
vector还是任何其他标准库)这就是我问这个问题的原因。
标签: c++