gpt4 book ai didi

c++ - C++ 标准是否保证未使用的私有(private)字段会影响 sizeof?

转载 作者:IT老高 更新时间:2023-10-28 23:20:34 24 4
gpt4 key购买 nike

考虑以下结构:

class Foo {
int a;
};

在 g++ 中测试,我得到了 sizeof(Foo) == 4 但标准是否保证了这一点?是否允许编译器注意到 a 是一个未使用的私有(private)字段并将其从类的内存表示中删除(导致更小的 sizeof)?

我不希望任何编译器真正进行这种优化,但这个问题出现在语言律师讨论中,所以现在我很好奇。

最佳答案

C++ 标准没有定义很多关于内存布局的内容。这种情况的基本规则是 9 Classes 部分下的第 4 项:

4 Complete objects and member subobjects of class type shall have nonzero size. [ Note: Class objects can be assigned, passed as arguments to functions, and returned by functions (except objects of classes for which copying or moving has been restricted; see 12.8). Other plausible operators, such as equality comparison, can be defined by the user; see 13.5. — end note ]

不过,现在还有一个限制:标准布局类。 (没有静态元素,没有虚拟元素,所有成员的可见性相同)9.2 类成员 节要求标准布局类的不同类之间的布局兼容性。这可以防止从这些类中消除成员。

对于重要的非标准布局类,我认为标准中没有进一步的限制。 sizeof(), reinterpret_cast(), ... 的确切行为是实现定义的(即 5.2.10 “映射函数是实现定义的。”)。

关于c++ - C++ 标准是否保证未使用的私有(private)字段会影响 sizeof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21915630/

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