我们知道,struct并且class可以在语言的许多地方互换.令人困惑的是,关键字本身并不一定与标准中使用的语言相对应.例如,在草案标准N4567 [class]/10中,
甲POD结构109是一个非工会类既是琐碎类和一个标准布局类,和具有类型的非POD结构,非POD联合(或这些类型的阵列)的无非静态数据成员.类似地,POD联合是一个简单的类和标准布局类的联合,并且没有非POD结构类型的非静态数据成员,非POD联合(或这种类型的数组).甲POD类是一类可以是一个POD结构或一个POD结合.
在过于简化的术语,struct并且class是在以下情况下可以互换:
union但是,struct 显式不能在模板声明中用于引入类型模板参数:
template <struct T> // error
Run Code Online (Sandbox Code Playgroud)
我无法看到之间的任何显著差异struct和class,甚至在POD上面的例子,因为一个POD结构为界定标准,使用时请声明struct或class.
[class]/8 标准布局结构是使用类键结构或类键类定义的标准布局类.甲 标准布局联盟是与定义的标准布局类类键联合.
这引起了明显的不一致,这似乎相当多余和令人困惑.
我有两个问题:
是否有任何技术差异,我错过了明显区分struct和class?
这种笨拙背后的理由是什么?
我忽略了默认访问说明符之间的区别,因为每个人都已经知道了.