![](/img/trans.png)
[英]Why does calling an overloaded constructor cause a call of the default constructor?
[英]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);
可以解釋為從int
到X
,或者 X(answer);
可以解釋為變量的聲明。 但是, 它打印X()
,我不知道為什么X(answer);
會調用默認構造函數。
獎勵積分:我需要更改什么才能獲得臨時而非變量聲明?
什么都沒有,因為X(答案); 可以解釋為變量的聲明。
你的答案隱藏在這里。 如果聲明一個變量,則調用其默認的ctor(如果是非POD和所有那些東西)。
在你的編輯:要獲得一個臨時的,你有幾個選擇:
括號是可選的。 你說的與X answer;
相同X answer;
,這是一份聲明聲明。
如果要聲明X類型的變量,則應該這樣做:
X y(answer);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.