在表达式 p + a
中,其中 p
是一个指针类型,a
是一个整数,整数提升规则是否适用?例如,如果 a
是一个 char
,在 64 位机器上它肯定会在添加到指针值之前扩展到 64 位(在编译的程序集中) ,但它是由标准指定的吗?会提升到什么地步? int
、intptr_t
还是 ptrdiff_t
? unsigned char
或 size_t
会被转换成什么?
最佳答案
因为 char
是一个整数类型,标准似乎不需要任何提升:
对于加法,两个操作数都应具有算术或无作用域枚举类型, 或一个操作数应是指向完全定义的对象类型的指针,而另一个应具有整数或无范围枚举类型
似乎实现可能取决于底层架构允许的指针添加类型 - 所以如果架构支持 address+BYTE
- char
一切都很好 - 如果它不会提升到支持的最小地址偏移大小。
指针相减的结果被定义为“std::ptrdiff_t”类型
两个指向同一数组对象元素的指针相减时,结果是两个数组元素下标的差值。结果的类型是实现定义的有符号整数类型;此类型应与 header 中定义为 std::ptrdiff_t 的类型相同
关于c++ - 指针运算和积分提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20649734/