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