alignof(T *)是否对所有可能的类型都相同?那么sizeof(T *)呢?

问题描述 投票:3回答:1

alignof(T*)是否对于所有可能的类型T都是相同的值?那sizeof(T*)呢?请根据标准允许/指定的条件回答,而不是基于不同编译器的当前情况。

c++ pointers language-lawyer sizeof alignof
1个回答
3
投票

该标准并未对指针的大小和对齐方式进行过多说明,因此它们不受语言的严格限制。

从一个有效的指针到函数的转换到另一个然后再返回保证可以产生原始值。因此,必须有可表示的值的最小数量相同,即对于任何给定的函数类型指针,有效地址的最大数量将为所有函数类型指针的大小赋予下限。

对象类型之间的转换具有类似的保证,但是,仅当原始指针类型具有更严格或相等的对齐要求时才适用。结果,指向高度对齐类型的对象指针需要较少的可表示值。如果对齐方式足够高,则理论上类型可以更小。

在允许转换为void的指针和指向功能的指针之间进行转换的系统上(有条件地支持),指向功能的指针和指向void的指针的可表示值的最小数量必须相同。

但是即使如此,某些指针类型也可能大于其所需的可表示值的数量。这些额外的位将根本就没有被使用。这不是很实用。

© www.soinside.com 2019 - 2024. All rights reserved.