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
to X
, or
- 什么都没有,因为
X(answer);
可以被解释为变量的声明。
然而,它打印X() http://ideone.com/QZDO1,我不知道为什么X(answer);
会调用默认构造函数。
奖励积分:我需要更改什么才能获得临时声明而不是变量声明?
什么都没有,因为 X(answer);可以被解释为变量的声明。
你的答案就藏在这里。如果你声明一个变量,你就会调用它的默认构造函数(如果不是 POD 等)。
在您的编辑中:要获得临时的,您有几个选择:
- (X(answer)); http://liveworkspace.org/code/0d8f045cd715a27f126d26591098fc72
- (X)answer; http://liveworkspace.org/code/87e18d40ffc27e49e0a07c9c05f1a775
- static_cast<X>(answer) http://liveworkspace.org/code/9619098847d97f1809fb02adb219ab5d
-
X{answer}; http://liveworkspace.org/code/c78c002e32755e18b3c03eaac6951e85 (C++11)
-
[]{ return X(answer); }(); http://liveworkspace.org/code/d3393ff9bb3f302c3e9facfba22f1c64(C++11,可能会产生复制)
- void(), X(answer); http://liveworkspace.org/code/c803c5e68bf825d87e83cfa5294ee701
- X((void(),answer)); http://liveworkspace.org/code/ee2160ded0abd7dea87b2e743861af08
- true ? X(answer) : X(); http://liveworkspace.org/code/d29e7f10fceadca7ec24fef163b8afb6
- if(X(answer), false){} http://liveworkspace.org/code/6eff0bb82d0c27334322ce22761e3ea2
- for(;X(answer), false;); http://liveworkspace.org/code/160fa87d472ebe74c3f5c2b44d7ff706
- X(+answer); http://liveworkspace.org/code/6914b3dbc2b6821e5bc51467dab97420
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)