A a()是什么意思?

min*_*ain 5 c++

考虑以下代码:

#include<iostream>
using namespace std;

class A
{
    public:
    A():age(12){}
    int age;
};

int main()
{
    A a();
    cout << a.age << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我使用g ++编译它时,我收到一个错误:

你看不到会员的年龄,因为a不是A级()

谁可以给我解释一下这个?什么是A a()

Pix*_*ist 11

这条线

A a();
Run Code Online (Sandbox Code Playgroud)

声明一个名为的函数a,返回A时不带参数.(见最烦恼的解析).

你想要的是什么

A a = A(); // value-initialization
A a{}; // the same but only valid in C++11 (and currently not supported by MSVS)
Run Code Online (Sandbox Code Playgroud)

要么

A a; // default initialization
Run Code Online (Sandbox Code Playgroud)

C++ 11,§8.5/ 10

注意:由于初始化程序的语法不允许(),

X a();

不是类X的值初始化对象的声明,而是函数的声明,不带参数并返回X.

对于您的类,值初始化==默认初始化(至少对于结果).请参阅我的答案:C++:对于POD或内置类型的值与默认初始化的Infos 的隐式构造函数初始化int变量.

  • 呃,为什么不只是'A a;`? (9认同)

jer*_*rry 5

它定义了一个函数a,它返回一个类型的对象A.这被称为"最令人烦恼的解析".