const int 隐式转换 C++
const int implicit conversion C++
我想知道在使用指向常量整数的指针时,变量之间是否存在某种隐式转换,
例如,如果我使用变量类型的地址 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.
第一个和第二个赋值初始化pci
到constly指向一个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
限定符
我想知道在使用指向常量整数的指针时,变量之间是否存在某种隐式转换, 例如,如果我使用变量类型的地址 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.
第一个和第二个赋值初始化pci
到constly指向一个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
限定符