int 1的默认值是?

时间:2012-08-01 02:55:48

标签: c++

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这里的函数不是变量。

2 个答案:

答案 0 :(得分:17)

a不是int:它是一个没有参数并返回int的函数。因为它是函数声明,a也不是局部变量,并且没有“默认值”。

该程序格式错误,因为您从未定义函数a,但您尝试使用它(通过在插入表达式中获取其地址)。因此违反了一个定义规则。

如果您在计划中定义a,则会打印1,因为函数a的地址将转换为booloperator<<具有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 {};

花括号不会像括号那样混淆功能声明的一部分。