根据我读过的一本书:
我们可以使用指向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;
我认为指针也是对象?
答案 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的操作。但这通常是非常错误的,你应该很可能避免它。