考虑这段代码:
#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()?
考虑这段代码:
#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()?
这条线
A a();
声明一个名为 的函数a,不带参数返回A。(参见最令人烦恼的解析)。
你想要的是
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
注意:由于初始化程序的语法不允许 (),
X a();不是类 X 的值初始化对象的声明,而是一个不带参数并返回 X 的函数的声明。
对于您的课程,值初始化 == 默认初始化(至少对于结果而言)。请在此处查看我的答案:C++:通过隐式构造函数为信息初始化 int 变量,用于 POD 或内置类型的值初始化与默认初始化。
它定义了一个被调用的函数,该函数a返回一个类型为 的对象A。这被称为“最令人头疼的解析”。