const int隐式转换C ++

时间:2016-11-27 13:45:02

标签: c++ casting const const-cast

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

2 个答案:

答案 0 :(得分:1)

第一次和第二次分配将pci初始化为常量指向intconst 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限定符