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
到 0x25181223123, 0x25181223123, 139 或 139 的转换X
可以解释为变量的声明。 但是, it prints
X(answer);
,我不知道为什么 X()
会调用默认构造函数。奖励积分:我需要更改什么才能获得临时声明而不是变量声明?
最佳答案
你的答案隐藏在这里。如果你声明一个变量,你会调用它的默认构造函数(如果非 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);
关于c++ - 为什么这会调用默认构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11691021/