从this question向C ++中学习It is okay to put the name of the variable in parenthesis 我试过这个程序:
#include <iostream>
int main()
{
int (a)();
std::cout << "if this works then deafult value of int should be " << a << std::endl;
return 0;
}
获得'if this works then deafult value of int should be 1'的输出 那么,是真的吗?
EDIT ::
在我尝试为a
分配值时,阅读@ james-mcnellis回答后,它会给出错误assignment of function ‘int a()’。
现在很明显,a
这里的函数不是变量。
答案 0 :(得分:17)
a
不是int
:它是一个没有参数并返回int
的函数。因为它是函数声明,a
也不是局部变量,并且没有“默认值”。
该程序格式错误,因为您从未定义函数a
,但您尝试使用它(通过在插入表达式中获取其地址)。因此违反了一个定义规则。
如果您在计划中定义a
,则会打印1
,因为函数a
的地址将转换为bool
:operator<<
具有bool
参数的重载是函数指针参数类型的最佳匹配。
[注意:如果您定义a
并使用Visual C ++进行编译,它将打印函数的地址,而不是1
。这是(我认为)因为Visual C ++允许函数指针隐式转换为void*
,然后具有operator<<
参数的void const*
重载是函数指针的最佳匹配参数类型。如果您在禁用语言扩展程序(/Za
)的情况下进行编译,则会按预期选择带有bool
参数的重载。]
答案 1 :(得分:4)
正如James McNellis所说,你没有宣布一个int,你宣布了一个功能。
但是,您可以使用如下默认值初始化int:
int i = int();
默认值不是1,它是0.
std::cout << "this prints '0': " << int() << '\n';
在C ++ 11中,您可以使用统一初始化:
int i {};
花括号不会像括号那样混淆功能声明的一部分。