c++ - 指针运算和积分提升

标签 c++ c pointers standards

在表达式 p + a 中,其中 p 是一个指针类型,a 是一个整数,整数提升规则是否适用?例如,如果 a 是一个 char,在 64 位机器上它肯定会在添加到指针值之前扩展到 64 位(在编译的程序集中) ,但它是由标准指定的吗?会提升到什么地步? intintptr_t 还是 ptrdiff_tunsigned charsize_t 会被转换成什么?

最佳答案

因为 char 是一个整数类型,标准似乎不需要任何提升:

对于加法,两个操作数都应具有算术或无作用域枚举类型, 或一个操作数应是指向完全定义的对象类型的指针,而另一个应具有整数或无范围枚举类型

似乎实现可能取决于底层架构允许的指针添加类型 - 所以如果架构支持 address+BYTE - char 一切都很好 - 如果它不会提升到支持的最小地址偏移大小。

指针相减的结果被定义为“std::ptrdiff_t”类型

两个指向同一数组对象元素的指针相减时,结果是两个数组元素下标的差值。结果的类型是实现定义的有符号整数类型;此类型应与 header 中定义为 std::ptrdiff_t 的类型相同

关于c++ - 指针运算和积分提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20649734/

相关文章:

c++ - 模板接口(interface)实现类 C++ 错误

c++ - tinyxml2 相当于 TiXmlNode 枚举?

c - 参数变量存储在内存中的什么位置?

c - 如何查看 C 中流中的下一个字符?

c - 如何在不触发警告的情况下将整数值转换为指针地址

c - 在 C 中取消引用

c - 在循环链表的开头插入

c++ - 泛型类中的赋值运算符。 C++

c++ - Opengl 与 gluPerspective 的混淆

c - c中初始化与未初始化的全局const变量