21

可能重复:
为什么使用空括号调用不带参数的构造函数是错误的?

在对这个问题的回答中,有人说

int 默认构造为 0,就像您使用 int() 初始化它们一样。其他原始类型也以类似方式初始化(​​例如,double()、long()、bool() 等)。

就在我向我的一位同事解释这一点时,我编写了以下代码,编译 (gcc-4.3.4) 并运行,并观察到意外行为。

#include <iostream>

int main() {
  int i(); 
  std::cout << i << std::endl; // output is 1
}

为什么是输出1而不是0

4

1 回答 1

36

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

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

int i = int(); 
于 2012-06-20T10:20:38.483 回答