gpt4 book ai didi

c++ - 将 [[no_unique_address]] 与空基类继承结合使用时出现意外结果

转载 作者:行者123 更新时间:2023-12-04 12:32:01 25 4
gpt4 key购买 nike

考虑 following :

struct Base {};

struct Empty {};

struct X : Base {
int i;
[[no_unique_address]] Empty e;
};

static_assert(sizeof(X) == 4);

X 继承空的Base 并获得EBO ,并且由于它的成员 e 也使用 [[no_unique_address]] 属性,这使得 X 的大小仅为 的大小整数

但是当我使用 X 作为继承空 Base 的另一个结构 Y 的成员变量时,Y 的大小 突然变成了 8:

struct Y : Base {
X x;
[[no_unique_address]] Empty e;
};

static_assert(sizeof(Y) == 8);

Y 是否违反了标准并使 EBO 被禁止?还是这仅取决于编译器供应商的实现?

最佳答案

直接引自cppreference :

Empty base optimization is prohibited if one of the empty base classesis also the type or the base of the type of the first non-static datamember, since the two base subobjects of the same type are required tohave different addresses within the object representation of the mostderived type.

关于c++ - 将 [[no_unique_address]] 与空基类继承结合使用时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68436920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com