簡體   English   中英

為什么這會調用默認構造函數?

[英]Why does this call the default constructor?

struct X
{
    X()    { std::cout << "X()\n";    }
    X(int) { std::cout << "X(int)\n"; }
};

const int answer = 42;

int main()
{
    X(answer);
}

我本來希望這打印

  • X(int) ,因為X(answer); 可以解釋為從intX ,或者
  • 什么都沒有,因為X(answer); 可以解釋為變量的聲明。

但是, 它打印X() ,我不知道為什么X(answer); 會調用默認構造函數。

獎勵積分:我需要更改什么才能獲得臨時而非變量聲明?

什么都沒有,因為X(答案); 可以解釋為變量的聲明。

你的答案隱藏在這里。 如果聲明一個變量,則調用其默認的ctor(如果是非POD和所有那些東西)。

在你的編輯:要獲得一個臨時的,你有幾個選擇:

括號是可選的。 你說的與X answer;相同X answer; ,這是一份聲明聲明。

如果要聲明X類型的變量,則應該這樣做:

X y(answer);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM