【发布时间】:2014-08-07 04:37:40
【问题描述】:
我在第 3.7.4.3/3 节中遇到了以下内容:
整数值是安全派生的整数表示 仅当其类型至少与 std::intptr_tand 一样大时的指针 是以下之一:
[...]
— 加法或按位的结果 操作,其中一个操作数是一个整数表示 安全派生的指针值
P,如果该结果由reinterpret_cast<void*>将比较等于安全派生的 可从reinterpret_cast<void*>(P)计算的指针。
好的,让int *P = new int(1); 是一个指针,long p_int = <reinterpret_cast<long>(P); 是他的整数表示。考虑以下代码:
int *P = new int(1); //Safely-derived pointer
long p_int = <reinterpret_cast<long>(P); //Integer representation of safely derived pointer
long new_p_int = p_int + 10; // Result of an additive operation
void *new_P = reinterpret_cast<void*>(new_p_int);
void *P_cpnverting_to_void = reinterpret_cast<void*>(P);
cout << "P converted to void* = " << P_cpnverting_to_void << endl;
cout << "P after result of an additive operation = " << new_P << endl;
规则不明确。结果指针如何比较等于 reinterpret_cast(P)?在应用加法运算后,它们永远不会相等。您能否提供反映规则的实际示例?
【问题讨论】: