A a()是什么意思?

时间:2013-07-18 01:45:01

标签: c++

考虑以下代码:

#include<iostream>
using namespace std;

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

int main()
{
    A a();
    cout << a.age << endl;
    return 0;
}

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

  

您无法看到会员年龄,因为a不是A(()

有人可以向我解释一下吗?什么是A a()

2 个答案:

答案 0 :(得分:11)

这一行

A a();

声明一个名为a的函数,返回A,不带参数。 (见Most vexing parse)。

你想要的是

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

A a; // default initialization

C ++ 11,§8.5/ 10

  

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

     
X a();
     

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

对于您的类,值初始化==默认初始化(至少对于结果)。 请参阅我的答案:C++: initialization of int variables by an implicit constructor,了解有关POD或内置类型的值与默认初始化的信息。

答案 1 :(得分:5)

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