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);