考慮以下代碼:GCC顯示0顯示不同的值
#include <iostream>
using namespace std;
struct Z
{
Z() { cout << "ctor Z" << endl; }
};
struct A
{
A() = default;
A(int xx) : x(xx) {}
int x;
Z z;
};
int main()
{
A a;
cout << "a.x = " << a.x << endl;
}
與最新的GCC編譯它打印:
ctor Z
a.x = 0
但隨着最新鏘編譯它打印:
ctor Z
a.x = 4198800
爲什麼?有人可以解釋這個嗎? GCC是否發起「X」 prinitive價值,同時它並沒有做到這一點?或者,也許Clang不會用0來初始化'x',而應該這樣做呢?
當我從「A」結構中刪除我的構造函數時會發生同樣的情況,所以它不是構造函數被標記爲「默認」或類似的事情。簡單地說 - 一個編譯器生成的代碼調用其成員的構造函數作爲類對象,並且成員也是原語。另一個編譯器只運行類對象成員的構造函數。
爲什麼?
見:https://stackoverflow.com/a/16782131/1526322,標準說的價值是不確定的。 GCC將其歸零。在定義之前,您不應該使用該值。您應該始終認爲該標準比編譯器更正確。 – Knox