我知道C ++中的struct和class非常相似,并且struct成员默认具有公共访问权限,而类成员具有私有访问权等等。等等。
但是,由于struct实例可以像这样初始化:
struct MyStruct{
int a;
int b;
int c;
};
MyStruct s1 = {1, 2, 3}; //a=1, b=2, c=3
MyStruct s2 = {}; //a=0, b=0, c=0
对C ++中的类做同样的事情是否安全?例如:
class MyClass{
int a;
int b;
int c;
};
MyClass c1 = {1, 2, 3}; //a=1, b=2, c=3
MyClass c2 = {}; //a=0, b=0, c=0
问题:我知道我们可以使用构造函数,如果我初始化像struct实例这样的类实例,是否有任何陷阱?如果我使用这种方法将数据成员初始化为其默认值(例如0表示int,null表示指针),这是一个安全的操作吗?
答案 0 :(得分:5)
struct
和class
之间的唯一区别是默认访问规范:MyClass
有三个private
成员,MyStruct
有三个public
那些。因此,MyClass
不是聚合(其中一个要求是类没有私有或受保护的非静态数据成员),这使得此代码格式错误:< / p>
MyClass c1 = {1, 2, 3}; // error
但是,MyStruct
的初始化与MyClass
的初始化之间没有任何区别,如果您使成员全部public
。