Ale*_*_KH 2 c++ implicit-conversion pointer-conversion
考虑这个案例:
int *ptr;
int offset;
ptr = <some_address>;
offset = 10;
Run Code Online (Sandbox Code Playgroud)
假设它offset是 32 位变量。ptr具有 type int*,目标体系结构是 64 位(ptr8 字节变量也是如此),offset具有 type int。计算表达式的值时会进行什么转换*(ptr + offset)?我在哪里可以在 2003 C++ 标准中阅读它?
这就是标准对这个 [expr.add]/4 的看法:
当具有整数类型的表达式与指针相加或相减时,结果具有指针操作数的类型。如果指针操作数指向数组object84的一个元素,并且数组足够大,则结果指向一个元素偏移量,使得结果和原始数组元素的下标之差等于积分表达式。换句话说,如果表达式 P 指向数组对象的第 i 个元素,则表达式 (P)+N(等价于 N+(P))和 (P)-N(其中 N 的值为 n)指向分别为 i + n-th 和 i =? 数组对象的第 n 个元素,前提是它们存在。
在简单的话,这就意味着,如果地址ptr指向递增offset * sizeof(*ptr),当你写ptr + offset。