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

时间:2011-08-25 11:47:43

标签: c++ class struct

  

可能重复:
  What are the differences between struct and class in C++

usedthink C ++类之间的差异是私有的默认类成员访问修饰符和类似于布局的C保证

事实证明我错了,因为这段代码无法编译:

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

然而这样做:

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

我无法弄清楚为什么会有区别,但显然是在Visual C ++ 2008中:

  

错误C2552:'var':无法使用初始化列表初始化非聚合

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

什么是 所有 C ++中结构和类之间的差异?

当然,如果你发现我在其他问题上遗漏了一些内容,请随时关闭 - 我当然可以。但我没有看到在任何答案中都讨论过这个问题,所以我想我会问。

4 个答案:

答案 0 :(得分:15)

您只能将{}初始化程序用于聚合 1 ,而第一个不是聚合,因为它有一个private数据成员。

标准在第8.5.1 / 1节中说明,

  

聚合是一个没有用户声明的数组或类(第9节)   构造函数(12.1),没有私有或受保护的非静态数据成员   (第11条),没有基类(第10条),也没有虚函数   (10.3)。

1。好吧,我的意思是,在C ++ 03中,你只能使用{}进行聚合,但在C ++ 11中,你可以使用{}甚至非聚合(如果非聚合类)正确实施以处理这个问题。)

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

答案 1 :(得分:4)

<{1}}和class之间的区别,但聚合非聚合之间的区别<。您不能将初始值设定项列表与非聚合类型一起使用,但这与structclass关键字无关:

struct

答案 2 :(得分:3)

公共与私人之间的差异

请改为尝试:

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

答案 3 :(得分:1)

似乎一个类的成员是私有的,并且任何继承都是私有的,而结构都是公共的。

其他人将不得不给你更具体的细节,抱歉。