谈到struct和class的区别,我们的第一反应就是struct也可以和class一样拥有多态,继承的特性,最大的不同只是他们的默认权限不同,struct默认访问权限是public,class默认权限是private,但其实还有一点:memory layout可能不同。
struct(没有使用虚函数)的数据成员声明顺序和这些数据成员在内存中的offset一定是一致的。而class只有在POD原则(Plain Old Data)下才与struct的memory layout一致。
那么问题来了什么是满足POD原则的class?
POD数据类型
概念
POD数据类型主要用来解决C++与C之间数据类型的兼容性,以实现C++程序与C函数的交互。
- POD类型(plain old data),与C兼容的原始数据,例如,结构体和整型等C语言中的类型是POD类型,而带有用户自定义的构造函数或虚函数的类则不是(指针类型也是POD类型)
- string t_obj1(“cppcourase”); //错误,不能调用对象的构造函数
- string* t_obj2 = new string; //错误,初始化只能是编译期常量
- string* t_obj3 = NULL; //正确
什么情况下满足POD原则
C++11中把POD分为了