【发布时间】:2014-01-02 04:59:52
【问题描述】:
C+11 [basic.align] 说:
对象类型对该类型的每个对象都有对齐要求;可以使用对齐说明符请求更严格的对齐
接下来就举个例子:
struct B { long double d; };
struct D : virtual B { char c; }
并说下面的例子:
当 D 是一个完整对象的类型时,它会有一个 B 类型的子对象,因此它必须为 long double 适当对齐。如果 D 显示为另一个也将 B 作为虚拟基类的对象的子对象,则 B 子对象可能是不同子对象的一部分,从而降低了 D 子对象的对齐要求。
那么对对象类型为 D 的所有对象施加的对齐要求是什么?我理解 D 子对象具有对象类型 D,这将使其受制于相同的要求。当 D 作为子对象出现时,它们适用于所有子对象时,它们如何消除这些要求?或者我是否应该将其理解为完整的 D 对象对对象类型强加的要求有进一步的要求,并且当 D 作为子对象出现时,这些要求可能会被削弱?
【问题讨论】:
标签: c++ c++11 memory-alignment