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);
可以被解释为变量的声明。然而,it prints X()
,我不知道为什么X(answer);
会调用默认构造函数。
奖励积分:我需要更改什么才能获得临时而非变量声明?
答案 0 :(得分:73)
什么都没有,因为X(回答);可以解释为变量的声明。
你的答案隐藏在这里。如果声明一个变量,则调用它的默认ctor(如果是非POD和所有那些东西)。
在您的编辑中:要获得临时性,您可以选择以下几种方法:
答案 1 :(得分:65)
括号是可选的。你所说的与X answer;
相同,这是一个声明声明。
答案 2 :(得分:9)
如果要声明X类型的变量,则应该这样做:
X y(answer);