fre*_*low 80 c++ syntax most-vexing-parse
struct X
{
X() { std::cout << "X()\n"; }
X(int) { std::cout << "X(int)\n"; }
};
const int answer = 42;
int main()
{
X(answer);
}
Run Code Online (Sandbox Code Playgroud)
我本来希望这打印
X(int),因为X(answer);可以解释为铸件从int到X,或X(answer);可以解释为变量的声明.但是,它打印X(),我不知道为什么X(answer);会调用默认构造函数.
奖励积分:我需要更改什么才能获得临时而非变量声明?
Xeo*_*Xeo 73
什么都没有,因为X(答案); 可以解释为变量的声明.
你的答案隐藏在这里.如果声明一个变量,则调用其默认的ctor(如果是非POD和所有那些东西).
在你的编辑:要获得一个临时的,你有几个选择:
(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类型的变量,则应该这样做:
X y(answer);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2455 次 |
| 最近记录: |