- 论坛徽章:
- 17
|
回复 1# udodoo
标准对此的确有规定,但没有明确规定空对象一定要是1字节,标准只是规定了对象的大小必须大于0,首先标准中有如下标定“An object is a region of storage. ”,显然不存在0字节长度的存储区域,这句话隐含了空对象是大于0的,另外还有标定“a most derived object shall have a non-zero size and shall occupy one or more
bytes of storage. Base class sub-objects may have zero size. An object of POD contiguous bytes of storage.”,说明了最终派生对象大小是非0值,其大小可以是1或多个字节,基类子对象可以为0(任何可直接创建的对象都不会为0,如果一个类A是个空类,那么直接创建对象的时候大小为1,如果B类从A类派生并且没有额外的数据成员,那么直接创建B类时大小依然为1,规定对基类子对象可为0的规定使的编译器会进行空基类优化)。最后在关于sizeof操作符中也有相关规定“The size of a most derived class shall be greater than zero ”,可见规定的确规定了空对象大小不能为0的现实,但却不强制其大小一定为1(这为编译器为不同的操作系统进行优化留有余地,比如说在不同字长[8,16,32,64]位CPU下,最有效率的操作数类型都是CPU的字长,那么编译器可以选择机器字长来作为不为0时的最小长度)。
|
|