gpt4 book ai didi

c++ - 是否 sizeof(T) == sizeof(const T) 和 alignof(T) == alignof(const T)

转载 作者:IT老高 更新时间:2023-10-28 12:33:09 27 4
gpt4 key购买 nike

假设 Tconst T 是两种大小相同且对齐方式相同的类型似乎是合理的,但在考虑了一些实际系统之后,似乎它们可能会有所不同。

让我解释一下:

假设您的系统具有两种类型的内存:RAM 和闪存(只读)。 RAM 是 8 位可寻址的,而 Flash 只能是 16 位可寻址的。假设这是 T:

struct T
{
uint8_t x;
uint16_t y;
};

在字节可寻址 RAM 中,该结构体的长度为 3 个字节......但在双字节可寻址闪存(const 变量所在的位置)中,该结构体必须位于由于对齐问题,至少 4 个字节长。

所以这是我的问题:

c 和 c++ 标准是否保证 const 和非const 类型的大小和对齐方式?

最佳答案

第 3.9.3 节:

The cv-qualified or cv-unqualified versions of a type are distinct types; however, they shall have the same representation and alignment requirements (3.11). 53

这里的“cv-qualified”指的是constvolatile。所以答案是肯定的。

constvolatile 仅指定访问指定对象的限制/属性。它们不被认为是基本类型本身的一部分;因此它们不会影响类型的属性。

关于c++ - 是否 sizeof(T) == sizeof(const T) 和 alignof(T) == alignof(const T),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38799924/

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