为什么这个调用默认的构造函数?
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);