luk*_*r3k 2 c++ initialization class datamember visual-studio
class A
{
private:
int a;
public:
int get_a()
{
return a;
}
A(int mode)
{
a = 0;
}
A()
{
a = 5;
}
};
class B
{
public:
A b(0);
};
class C
{
int c;
public:
C(int mode)
{
c = 0;
}
C()
{
c = 1;
}
};
int main()
{
B bb;
C cc(0);
//cout << bb.b.get_a();
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我在 B 类中的 b 上使用 () 括号它会在我切换到 {} 时出现错误,一切都很好。我的问题是不应该允许我这样做,因为在 main 中的 cc 上它不会给出任何错误。我允许在初始化对象时使用 () 括号。
根据 C++ 20 标准(11.4 类成员),您可以使用大括号或等号初始化器来初始化类的数据成员
member-declarator:
...
declarator brace-or-equal-initializeropt
Run Code Online (Sandbox Code Playgroud)
所以你可以使用
class B
{
public:
A b = 0;
};
Run Code Online (Sandbox Code Playgroud)
或者
class B
{
public:
A b { 0 };
};
Run Code Online (Sandbox Code Playgroud)
这允许避免函数声明的歧义。