C++中struct默认public继承和public成员,与class唯一区别仅在于默认访问控制和继承方式;二者语义一致,支持全部OOP特性且内存布局相同。
struct 在 C++ 中默认是 public 继承和 public 成员
这是最常被忽略的底层规则:C++ 的 struct 和 class 语义几乎完全一致,唯一强制区别只有默认访问控制和默认继承方式。
也就是说,下面两个定义等价:
struct S {
int x;
void f() { }
};
class C {
public:
int x;
void f() { }
};
但如果你显式写了 private: 或 public:,那 struct 和 class 就彻底没区别了——编译器不认关键字,只认你写的访问标号。
-
struct默认成员访问权限是public;class默认是private -
struct默认继承方式是public;class默认是private - 二者都支持构造函数、析构函数、虚函数、模板、友元、静态成员、继承、多态……所有 OOP 特性
- 内存布局完全相同(只要成员类型和顺序一致),可互相
reinterpret_cast(谨慎!)
什么时候该用 struct,什么时候该用 class
这不是语法问题,而是约定和意图表达问题。C++ 标准不强制,但主流项目(如 STL、Qt、Google C++ Style Guide)有清晰倾向:
立即学习“C++免费学习笔记(深入)”;