const int 隐式转换 C++

const int implicit conversion C++

我想知道在使用指向常量整数的指针时,变量之间是否存在某种隐式转换, 例如,如果我使用变量类型的地址 intconst 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.

第一个和第二个赋值初始化pciconstly指向一个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 修饰符变得毫无意义,因为您将能够修改 "constant"地址通过转换后的变量。

简单地将指向 const 元素的指针分配给指向非 const 元素的指针是不允许的,因为这会默默地消除原始元素的 const-ness ,这是你不想要的,也可能是无声错误的来源,这是不允许的原因之一。

但是,如果这确实是您想要的,您可以使用 const_cast

明确请求删除 const 限定符