无法使用 'const int *' 类型的右值初始化 'int *const' 类型的变量

Cannot initialize a variable of type 'int *const' with an rvalue of type 'const int *'

为什么我有以下代码的错误:

const int r = 3;
int *const ptr = &r;

但是,如果我将 r 定义为普通 int,它会正常工作。据我了解,第二行只是将指针ptr定义为一个const,也就是说这个指针的值是不能改变的。但是为什么我一个const指针不能指向一个const int?

The clockwise/spiral rule表示定义

int *const ptr = &r;

使 ptr 成为指向 非常数 int.

的常量指针

也就是说,虽然变量 ptr 本身无法修改(您不能将其赋值给 ptr),但它指向的内容可以。这与常量 r 的类型不匹配。

如果你想要一个指向常量 int 的常量指针,你需要:

int const* const ptr = &r;

现在既不能修改变量ptr,也不能修改它指向的数据。