问问题
1336 次
2 回答
17
a
is not an int
:它是一个没有参数并返回一个int
. 因为它是一个函数声明,a
也不是一个局部变量,它没有“默认值”。
该程序格式错误,因为您从未定义函数a
但您尝试使用它(通过在插入表达式中获取其地址)。因此,它违反了单一定义规则。
如果你a
在程序中定义,1
会被打印出来,因为函数的地址a
会被转换为bool
:operator<<
有bool
参数的重载是函数指针参数类型的最佳匹配。
[注意:如果你a
用 Visual C++ 定义和编译,它会打印函数的地址,而不是1
. 这是(我认为)因为 Visual C++ 允许将函数指针隐式转换为void*
,然后operator<<
具有void const*
参数的重载是函数指针参数类型的最佳匹配。如果您在禁用语言扩展 ( ) 的情况下进行编译,则将按预期选择/Za
带有参数的重载。]bool
于 2012-08-01T03:00:14.053 回答
4
正如 James McNellis 所说,您不是在声明一个 int,而是在声明一个函数。
但是,您可以使用默认值初始化 int,如下所示:
int i = int();
而且默认值不是1,是0。
std::cout << "this prints '0': " << int() << '\n';
在 C++11 中,您可以使用统一初始化:
int i {};
花括号不会像圆括号那样混淆函数声明的一部分。
于 2012-08-01T04:22:00.420 回答