将指针指向const指向指针

时间:2014-07-02 14:35:24

标签: c++ pointers

根据我读过的一本书:

我们可以使用指向const的指针指向一个非对象:

我试过了:

int i = 42;
int *p1 = &i;
const int *const p3 = 0;
p1 = p3; //error: invalid conversion from 'const int*' to 'int*' [-fpermissive]

这是为什么?我尝试使用整数并且它有效。这是书中的内容:

int i = 42;
const int ci = i;
int j = ci;

我认为指针也是对象?

1 个答案:

答案 0 :(得分:2)

指向const的指针是关于特权,而不是指向对象的基本类型。

基本上,使用int const *(与const int*相同),您可以查看int(可能是const本身也可能不是const),但你无法改变它。将非const指针转换为const允许您将指向自己数据的指针传递给函数,并且不用担心函数可能会修改它,即使您仍然可以。

为了保持上述动态,你不能摆脱"摆脱"通过分配给另一个指针来const int * constPtr; int * nonconstPtr; *nonconstPtr = 42; // legal constPtr = nonconstPtr; // legal *constPtr = 42; // illegal! nonconstPtr = constPtr; // illegal! 。*那是你的错误所说的。也就是说,

const

*您实际上可以const_cast<>一起抛弃{{1}}。并且有correct uses的操作。但这通常是非常错误的,你应该很可能避免它。