int的默认构造函数

时间:2012-06-20 10:19:03

标签: c++

  

可能重复:
  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

1 个答案:

答案 0 :(得分:31)

最令人烦恼的解析在这里发挥作用。您实际上是在声明函数i,而不是int变量。它甚至不应该编译(除非你确实在某处定义了一个函数i ... 你呢?)。

要对int进行值初始化,您需要:

int i = int();