使用花括号初始化类实例

时间:2016-07-08 17:18:53

标签: c++ class struct initialization

我知道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表示指针),这是一个安全的操作吗?

1 个答案:

答案 0 :(得分:5)

structclass之间的唯一区别是默认访问规范:MyClass有三个private成员,MyStruct有三个public那些。因此,MyClass 不是聚合(其中一个要求是类没有私有或受保护的非静态数据成员),这使得此代码格式错误:< / p>

MyClass c1 = {1, 2, 3};  // error

但是,MyStruct的初始化与MyClass的初始化之间没有任何区别,如果您使成员全部public