C++ 为什么可以';我不能在作业的右边放一个指向常量的指针吗?

C++ 为什么可以';我不能在作业的右边放一个指向常量的指针吗?,c++,pointers,constants,variable-assignment,C++,Pointers,Constants,Variable Assignment,为什么我不能将常量int*cp1放在作业的右侧?请看这个样品 int x1 = 1; int x2 = 2; int *p1 = &x1; int *p2 = &x2; const int *cp1 = p1; p2 = p1; // Compiles fine p2 = cp1; //===> Complilation Error 为什么在指定的位置出现错误?毕竟,我并不是在尝试 更改常量值,我只是尝试使用常量值 我是不是遗漏了什么 毕竟,我并不是在试

为什么我不能将
常量int*cp1
放在作业的右侧?请看这个样品

int x1 = 1;
int x2 = 2;

int *p1 = &x1;
int *p2 = &x2;

const int *cp1 = p1;

p2 = p1;    // Compiles fine

p2 = cp1;   //===> Complilation Error
为什么在指定的位置出现错误?毕竟,我并不是在尝试 更改常量值,我只是尝试使用常量值

我是不是遗漏了什么

毕竟,我并不是在试图改变一个常量值

不允许从“指向常量的指针”隐式转换为“指向非常量的指针”,因为这样可以更改常量值。考虑以下代码:

const int x = 1;
const int* cp = &x; // fine
int* p = cp;        // should not be allowed. nor int* p = &x;
*p = 2;             // trying to modify constant (i.e. x) is undefined behaviour
顺便说一句:对于您的示例代码,可以使用,因为
cp1
实际上指向非常量变量(即
x1

p2=const_cast(cp1);

你不能把它剥掉。如果你可以删除常量并修改变量,那么常量的意义何在呢?很好的解释。基本上你要说的是,如果一个指针想要保持一个对象不变,不要用一个可能会改变它的指针指向那个对象。@LaeeqKhan是的,保持不变。如果你必须这样做,基本上意味着糟糕的设计。
p2 = const_cast<int*>(cp1);