为什么在打印函数时总是输出为 1?

Me *_*d I 4 c++

我想知道为什么我在打印这个函数时总是得到 1 的输出。这是代码:

#include <iostream>
using namespace std;

int main() {
    int x(int());
    cout << x; // 1
}
Run Code Online (Sandbox Code Playgroud)

它总是打印出一个。为什么?我期望它输出 0,因为整数默认为 0。那么为什么是 1?

Mat*_*lia 5

int x(int());
Run Code Online (Sandbox Code Playgroud)

是一个“最烦解析”的案例;你认为这是一个int( int x)的声明,初始化为 ints ( int())的默认值;相反,编译器将其解释为一个函数的声明,该函数返回一个int将一个(指向)函数作为参数的函数,该函数不接受任何参数并返回一个int(您可以得到本网站解释的毛茸茸的声明,或者对 C 有更多的了解)类型声明在这里)。

然后,当你这样做时:

cout << x;
Run Code Online (Sandbox Code Playgroud)

x这里衰减为函数指针,但没有重载operator<<需要函数指针;给出一些有效重载 的最简单的隐式转换operator<<是 to bool,并且由于函数指针不能有 0 ( NULL) 值,所以它被计算为true,打印为 1。

请注意,我并不完全确定这样的代码是否应该被编译而不会出错——您正在获取一个仅声明而未定义的函数的地址;它真的,它不能进行评估,以比其他任何东西true,但原则上的线,你应该得到一个链接错误(由优化这里掩盖,去除任何引用x,因为它不是实际使用)。


你真正想要的是:

int x=int();
Run Code Online (Sandbox Code Playgroud)