使用花括号初始化类实例

use*_*460 1 c++ struct initialization class

我知道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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

问题:我知道我们可以使用构造函数,如果我初始化像struct实例这样的类实例,是否有任何陷阱?如果我使用这种方法将数据成员初始化为其默认值(例如0表示int,null表示指针),这是一个安全的操作吗?

Bar*_*rry 5

struct和之间的唯一区别class是默认访问规范:MyClass有三个private成员,MyStruct有三个成员public.其结果,MyClass聚集(的要求之一是,一个类没有私人或受保护的非静态数据成员),这使得该代码非法的构造:

MyClass c1 = {1, 2, 3};  // error
Run Code Online (Sandbox Code Playgroud)

但有你的初始化没有什么区别MyStruct,什么你的初始化MyClass就已经拥有了你所做的所有成员public.