gpt4 book ai didi

c++ - C++ 中的类私有(private)成员是否保证内存顺序?

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:23 26 4
gpt4 key购买 nike

class my_class_t {

private:
uint64_t field1;
uint64_t field2;
};

field1field2 在内存中的顺序是否由 C++ 标准保证?

更新。答案说field2是,但是&field2可能不等于&field1 + 1。如何保证field2紧跟在field1之后?

最佳答案

它们保证彼此之间的地址递增([class.mem]/13):

Nonstatic data members of a (non-union) class with the same access control (Clause [class.access]) are allocated so that later members have higher addresses within a class object.

请注意我用粗体标记的文字。当 field2 都是私有(private)的时,可以保证它们在 field1 之后,但如果它们具有不同的访问控制,则不必如此。当然,中间填充始终是一种选择。

但是如果你想强制不存在填充,并且它们是同一类型,数组就可以做到:

uint64_t field[2];

它还使 &field[0] + 1 得到了很好的定义,因为这些对象现在显然是同一个数组的成员。

关于c++ - C++ 中的类私有(private)成员是否保证内存顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47592782/

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