指针可以有价值吗? 所以在哪种情况下使用
int num=100;
int* iptr=NULL;
iptr=reinterpret_cast<int*>(num);
printf("%d \n",num);
printf("%d \n",num);
结果 100 100
答案 0 :(得分:1)
reinterpret_cast
将整数转换为指针将不是安全导出的指针值,除非在某些情况下。您的示例不满足这些条件。CPP草案(N4713)的引用:
8.5.1.10重新解释演员表
...
6.整数类型或枚举类型的值可以显式转换为指针。指针将转换为足够大的整数(如果实现中存在这样的大小)并返回相同的指针类型,则指针将具有其原始值;指针和整数之间的映射是实现定义的。 [ 注意: 除6.6.4.4.3中所述外,这样的转换结果将不是安全得出的指针值。 —尾注]
安全派生指针的条件。
6.6.4.4.3安全衍生的指针
...
2指针值只有在具有对象指针类型并且是以下之一时,才是安全地指向动态对象的指针:
(2.1)—调用:: operator new(std :: size_t)或:: operator new(std :: size_t,std :: align_val_t)的C ++标准库实现的返回值;
(2.2)—取由左值指定的对象(或其子对象之一)的地址的结果,该左值是通过安全派生的指针值进行间接寻址而产生的;
(2.3)—使用安全得出的指针值进行的明确定义的指针算法的结果;
(2.4)—对安全派生的指针值进行明确定义的指针转换的结果;
(2.5)—对安全派生的指针值进行reinterpret_cast的结果;
(2.6)—对安全派生的指针值的整数表示形式的reinterpret_cast的结果;
(2.7)—一个对象的值,其值是从可追溯的指针对象复制而来的,其中在复制时,源对象包含一个安全派生的指针值的副本。