可能重复:
What are the differences between struct and class in C++
我used到think C ++类之间的仅差异是私有的默认类成员访问修饰符和类似于布局的C保证
事实证明我错了,因为这段代码无法编译:
class { int value; } var = { 42 };
然而这样做:
struct { int value; } var = { 42 };
我无法弄清楚为什么会有区别,但显然是在Visual C ++ 2008中:
错误C2552:
'var'
:无法使用初始化列表初始化非聚合
所以,是的,我会问多次重复的问题(希望没有重复的答案!):
当然,如果你发现我在其他问题上遗漏了一些内容,请随时关闭 - 我当然可以。但我没有看到在任何答案中都讨论过这个问题,所以我想我会问。
答案 0 :(得分:15)
您只能将{}
初始化程序用于聚合 1 ,而第一个不是聚合,因为它有一个private
数据成员。
标准在第8.5.1 / 1节中说明,
聚合是一个没有用户声明的数组或类(第9节) 构造函数(12.1),没有私有或受保护的非静态数据成员 (第11条),没有基类(第10条),也没有虚函数 (10.3)。
1。好吧,我的意思是,在C ++ 03中,你只能使用{}
进行聚合,但在C ++ 11中,你可以使用{}
甚至非聚合(如果非聚合类)正确实施以处理这个问题。)
另请参阅此详细解答(在{}
初始值设定项上):
答案 1 :(得分:4)
不 <{1}}和class
之间的区别,但聚合和非聚合之间的区别<。您不能将初始值设定项列表与非聚合类型一起使用,但这与struct
或class
关键字无关:
struct
答案 2 :(得分:3)
公共与私人之间的差异 。
请改为尝试:
class { public: int value; } var = { 42 };
答案 3 :(得分:1)
似乎一个类的成员是私有的,并且任何继承都是私有的,而结构都是公共的。
其他人将不得不给你更具体的细节,抱歉。