Sizeof空类

Joh*_*0te 7 c++

随着代码:

#include <iostream>

class A {};
class B { char x; };

int main()
{
    std::cerr << sizeof(A) << " " << sizeof(B) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我知道要问一个空课的大小是一个常见的面试问题 - 我知道答案是一个.

我的问题是......在一个空类的"1"字节中保存了什么(我猜它是空的),编译器在内部做了什么来使它sizeof Bsizeof A这种情况相同?

我想完全理解它,而不仅仅是知道答案.

Kon*_*lph 8

这不是一个有意义的问题:运行时只是将一个字节标记为已占用,因此不会在其位置分配其他对象.但是没有任何"持有"来占据字节.

此规则的唯一原因是对象必须是唯一可识别的.对象由其在内存中的地址标识.为了确保没有两个对象具有相同的地址(基类对象除外),空类对象通过具有非零大小来"占用"存储器.

  • @valdo这是一种误解.对象的唯一标识是*必不可少的*.C++中的对象由它们占用的内存*定义*(对象=根据定义的内存位置).如果对象共享一个地址,运行时将无法区分它们.这将打破C++类型系统背后的各种假设.举一个具体的例子,它会打破数组和指针算术. (4认同)