首页 > 解决方案 > 编译器使用参数与不使用参数做什么?

问题描述

我有一个关于 C++ 编译器的不重要问题。以下代码输出

1
2
3

我不知道为什么。用空参数声明它与根本没有括号有什么区别?

#include <iostream>
using namespace std;

int main()
{
    int x;
    cout << x << endl;

    int y();
    cout << y << endl;

    int z(2);
    cout << z << endl;

    return 0;
}

编译器是 g++。

标签: c++initialization

解决方案


第一个,x默认初始化为不确定的值,然后cout << x导致未定义的行为,意味着一切皆有可能。

具有自动和动态存储持续时间的非类变量的默认初始化会产生具有不确定值的对象

第二个,int y();声明一个名为 的函数y,它没有参数并返回int。For cout << y,y将衰减为函数指针,它可以bool隐式转换为然后你会得到1(即true。你可以使用std::boolalphalikestd::cout << std::boolalpha << y来获取输出true)。

第三个,z直接用 value初始化2,然后cout << z你会得到2.

带有 clang 的 LIVE 示例,请注意编译器给出的所有警告消息。


推荐阅读