爲什麼爲什麼當其他構造函數存在時,「ctor()= default」更改行爲?
struct wrapper
{
explicit wrapper(void *);
wrapper() = default;
int v;
};
int main() { return wrapper().v; } // You should run this in Debug mode
回報0xCCCCCCCC
,而
struct wrapper { wrapper() = default; int v; };
int main() { return wrapper().v; }
和
struct wrapper { int v; };
int main() { return wrapper().v; }
都返回0
?
當您添加非默認構造函數時,類型不再是聚合。我相信這是在玩這個,不知道如何。無論如何,我懷疑你保證它是0。 –
@RyanHaining:你確定嗎?如果是這樣的話,這似乎很奇怪,因爲這意味着只有當你沒有其他構造函數時纔可以使用'= default',這似乎毫無意義...... – Mehrdad
'= default'將返回默認的構造函數,但在這兩種情況下'v'都是非空間化的。有了gcc,即使在第一種情況下,我也能得到0,但這只是偶然。 –