为什么这个调用默认的构造函数?
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);
可以被解释为variables的声明。
但是, 它打印X()
,我不知道为什么X(answer);
会调用默认的构造函数。
奖励点:我需要改变什么才能获得临时而不是variables声明?
一无所有,因为X(答案); 可以被解释为variables的声明。
你的答案隐藏在这里。 如果你声明一个variables,你调用它的默认ctor(如果非POD和所有的东西)。
在您的编辑:要获得暂时的,你有几个select:
-
(X(answer));
-
(X)answer;
-
static_cast<X>(answer)
-
X{answer};
(C ++ 11) -
[]{ return X(answer); }();
(C ++ 11,可能会复制) -
void(), X(answer);
-
X((void(),answer));
-
true ? X(answer) : X();
-
if(X(answer), false){}
-
for(;X(answer), false;);
-
X(+answer);
括号是可选的。 你所说的和X answer;
是一样的X answer;
,这是一个声明声明。
如果你想声明一个Xtypes的variables,你应该这样做:
X y(answer);