可能重复:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?
在对this question的回答中,它说
ints默认构造为0,就好像用int()初始化它们一样。其他原始类型也是类似地初始化的(例如,double(),long(),bool()等)。
正当我向我的同事解释时,我编写了以下代码compiled (gcc-4.3.4) and ran,并发现了意外行为。
#include <iostream>
int main() {
int i();
std::cout << i << std::endl; // output is 1
}
为什么输出1
但是0
?
答案 0 :(得分:31)
最令人烦恼的解析在这里发挥作用。您实际上是在声明函数i
,而不是int
变量。它甚至不应该编译(除非你确实在某处定义了一个函数i
... 你呢?)。
要对int进行值初始化,您需要:
int i = int();