【发布时间】:2011-04-28 07:33:57
【问题描述】:
我在使用 g++ 4.4.3 对整数进行初始化时遇到了以下代码的奇怪行为。
int main()
{
int x(int());
int y = int();
cout << x << " " << y << endl;
}
结果是:
1 0
“y”的值如预期的那样是0,但是x的值却是奇怪的“1”!
在 VS2008 上产生以下链接错误(函数声明,但没有定义):
unresolved external symbol "int __cdecl x(int (__cdecl*)(void))"
谁能解释一下 g++ 的这种奇怪行为?
【问题讨论】:
-
@Skavcho,好问题。
x被解释为函数声明。你可以试试int x(*new int());。它会给你预期的结果为 0 0。 -
@iammilind:是的,但它会泄漏。
-
@Benoit:是的,每次调用
main()... -
@Ben Jackson:不要这么简单地贬低 Benoit 的回答。这段代码 sn-p 只是一个代码示例,旨在拥有尽可能小的执行程序。但是,问题的答案将在实际代码中使用。所以是的重要的是不要泄露。
-
正如@Jan 所说 - 这可以完成工作: int x((int()));