![](/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.