C ++’struct’和’class’之间的所有区别?

C++ all differences between 'struct' and 'class'?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What are the differences between struct and class in C++

我过去认为C++类之间唯一的区别是默认的类成员访问修饰符和LAID-OUT-O-C保证。

结果发现我错了,因为这段代码无法编译:

1
class { int value; } var = { 42 };

鉴于此:

1
struct { int value; } var = { 42 };

我不知道为什么会有不同,但是显然在Visual C++ 2008中:

error C2552: 'var' : non-aggregates cannot be initialized with initializer list

所以,是的,我会在重复的问题上问很多次(希望没有重复的答案!):

C++中结构和类之间的区别是什么?

当然,如果你发现我在其他问题上遗漏了一些东西,请随意结束这个问题——我当然会错过。但我没有看到在任何答案中讨论这个问题,所以我想我会问。


您只能对聚合1使用{}初始值设定项,而第一个初始值设定项不是聚合,因为它有一个private数据成员。

该标准在第8.5.1/1节中规定,

An aggregate is an array or a class (clause 9) with no user-declared
constructors (12.1), no private or protected non-static data members
(clause 11), no base classes (clause 10), and no virtual functions
(10.3).

1。嗯,我的意思是,在C++ 03中,你可以只使用EDCOX1,0,用于聚合,但是在C++ 11中,你可以使用EDCOX1,0,甚至使用非聚集(如果非聚集类被正确地执行来处理这个)。

另请参见此了解详细答案(在{}初始值设定项上):

  • 通过大括号的赋值是什么?它能被控制吗?


这不是classstruct之间的区别,而是聚合和非聚合之间的区别。不能将初始值设定项列表与非聚合类型一起使用,但它与classstruct关键字无关:

1
2
class { public: int value; } var = {42};   // compiles
struct { private: int value; } var = {42}; // error


区别在于公共的和私人的。

试试这个:

1
class { public: int value; } var = { 42 };


类的成员似乎是私有的,而继承也是私有的,因为结构是公共的。

但是,其他人必须给你更多的细节,对不起。