c – 为什么我不能在指派的右侧放一个指向const的指针?

为什么我不能把const 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

为什么在指定的位置收到错误?毕竟我没有试图去
改变一个恒定的值,我只是试图使用一个常量值.

在这里遗漏了一些东西

解决方法

After all I am not trying to change a constant value

不能允许从“指针到const”到“指向非const”的指针的隐式转换,因为这样可以改变常量值.想想下面的代码

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

BTW:对于您的示例代码,使用const_cast将很好,因为cp1实际上指向非常量变量(即x1).

p2 = const_cast<int*>(cp1);

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...