随着代码:
#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 B与sizeof A这种情况相同?
我想完全理解它,而不仅仅是知道答案.
这不是一个有意义的问题:运行时只是将一个字节标记为已占用,因此不会在其位置分配其他对象.但是没有任何"持有"来占据字节.
此规则的唯一原因是对象必须是唯一可识别的.对象由其在内存中的地址标识.为了确保没有两个对象具有相同的地址(基类对象除外),空类对象通过具有非零大小来"占用"存储器.
| 归档时间: |
|
| 查看次数: |
2018 次 |
| 最近记录: |