我知道在不同的翻譯單元(例如不同的cpp/lib/dll/so文件)中定義的靜態變量初始化的順序是未定義的。這是否意味着下面的程序行爲沒有很好的定義?全局對象本質上是不安全的?
#include <vector>
std::vector<int> v;
int main()
{
v.push_back(1);
}
編輯:在這裏我用STL向量作爲例子。但它可能是任何其他「第三方」課程的對象。因此,我們不知道該對象是否通過其他全局變量初始化。這意味着在C++中使用非平凡的構造函數創建一個單一的全局對象是不安全的。對?
如果你的全局變量的建設不依賴於任何其他的全局變量,它是安全的。 – 2014-11-06 13:46:44
不,訂單*未指定*,這意味着您不能依賴它們以任何特定順序進行初始化。如果您編寫依賴訂單的代碼,您可能(或不可能)導致未定義的行爲。請注意*指定*翻譯單位(如yours,*)內的訂單*。 – molbdnilo 2014-11-06 13:58:27
我將_undefined_更改爲_not well defined_ – 2014-11-06 14:01:16