我想知道当使用指向常量整数时,变量之间是否存在某种隐式转换, 例如,如果我使用变量类型 int 或 const int 的地址,它接受存储它, 但是,如果我使用普通的指向int 的指针,它不允许存储 const int 类型的地址,为什么会这样呢?,提前谢谢
int i=4;
const int ii=4;
//pointer to constant int
const int *pci=&i; //OK.
pci=ⅈ //OK.
int *pi=ⅈ //ERROR invalid conversion.
答案 0 :(得分:1)
第一次和第二次分配将pci
初始化为常量指向int
或const int
。
所以你可能有以下两种情况之一:
const int*
指向int
。
pci=&i;
const int*
指向const int
。
pci=ⅈ
这两种情况都是安全的,因为您只是 添加约束 。
通过做:
int *pi=ⅈ
您int*
指向const int
,这意味着 删除约束 。
由于删除约束可能存在风险,因此您需要使用const_cast
。
int* pi = const_cast<int*>(&ii);
请注意,强行移除const
修饰符是you should ask yourself twice if you really wanna do,因为它也会使const
修饰符变得毫无意义,因为您可以修改&#34;常量&#34; 通过转换后的变量进行地址。
答案 1 :(得分:1)
不允许将指向const
元素的指针指向指向非const
元素的指针,因为这样会默默地忽略原始的const
- ness,是你不想要的东西,也可能是沉默虫的来源,这是其不被允许的原因之一。
但是,如果这确实是您想要的,您可以使用const_cast
const
限定符