美文网首页
C++空类的大小

C++空类的大小

作者: mingzhi618 | 来源:发表于2019-03-19 10:58 被阅读0次

C++的空类是指这个类不带任何数据,即类中没有非静态(non-static)数据成员变量,没有虚函数(virtual function),也没有虚基类(virtual base class)。

直观地看,空类对象不使用任何空间,因为没有任何隶属对象的数据需要存储。然而,C++标准规定,凡是一个独立的(非附属)对象都必须具有非零大小。换句话说,

    C++空类的大小不为0

为了验证这个结论,可以先来看测试程序的输出。

#include <iostream>

using namespace std;                                                                                     

class NoMemers {

};

int main() {

  NoMemers n;

  cout << "the size of an object of empty class is:" << sizeof(n) << endl;

}

输出:

the size of an object of empty class is:1

C++标准指出,不允许一个对象(当然包括类对象)的大小为0,不同的对象不能具有相同的地址。这是由于:

    new需要分配不同的内存地址,不能分配内存大小为0的空间

    避免除以 sizeof(T)时得到除以0错误

故使用一个字节来区分空类。

值得注意的是,这并不代表一个空的基类也需要加一个字节到子类中去。这种情况下,空类并不是独立的,它附属于子类。

子类继承空类后,子类如果有自己的数据成员,而空基类的一个字节并不会加到子类中去。

原文:https://blog.csdn.net/lihao21/article/details/4797360

相关文章

  • 网易云课堂(Boolan)C++ 第四周笔记

    关于C++类的大小(size) 1. 空类 class AA{ }; #include int main() { ...

  • C++空类的大小

    C++的空类是指这个类不带任何数据,即类中没有非静态(non-static)数据成员变量,没有虚函数(virtua...

  • 【C++ Templates(19)】模板与继承

    空基类优化(EBCO) 布局原则 C++不允许类大小为0,比如数组元素为类,若类大小为0则数组大小也是0,这样会导...

  • 18 模板与继承

    空基类优化(EBCO) 布局原则 C++不允许类大小为0,比如数组元素为类时,若类大小为0则数组大小也是0,这会导...

  • c++面试问题总结

    1.c++面试问题总结:(1)空类的大小,仅含有虚函数类的大小(2)析构函数声明为虚函数的作用(3)C++多态的实...

  • 空类的大小

    空类就是没有任何数据成员的类,这种类占用的内存大小在不同的语言里面有不同的实现 c 这个结果输出是0,也就是说 c...

  • C/C++32位与64位数据类型占用的字节数

    C++继承、虚继承、虚函数类的大小问题

  • C++类的实例化对象的大小之SIZEOF()

    之所以写这篇《C++类的实例化对象的大小之sizeof()》总结一下。你不知道的C++类的实例化对象的大小之si...

  • sizeof 类的大小

    1. 空类大小 空类: 空类占用1个字节 运行的答案是: ** 这说明了空类所占用的空间为1, 单一继承的空类占用...

  • c++ 虚基类大小

    int ia_ + virtual f() + class B:virtual public A+ int ib_...

网友评论

      本文标题:C++空类的大小

      本文链接:https://www.haomeiwen.com/subject/xrxgmqtx.html