当前位置:   article > 正文

深入剖析struct与class_c++ struct class底层实现

c++ struct class底层实现

谈到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分为了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/714791
推荐阅读
相关标签
  

闽ICP备14008679号