为什么以下是非法的?
extern const int size = 1024;
int * const ptr = &size;
当然应该允许指向非 const 数据的指针指向 const int(而不是相反)?
这是来自 C++ Gotchas item #18
如果你真的是指其中之一
const int * const ptr = &size;
const int * ptr = &size;
这是合法的。你的是非法的。因为那不是你能做的
int * ptr const = &size;
*ptr = 42;
呸,你的 const 刚刚改变了。
让我们反过来看看:
int i = 1234; // mutable
const int * ptr = &i; // allowed: forming more const-qualified pointer
*i = 42; // will not compile
我们不能在这条路上做坏事。
如果允许指向非常量数据的指针指向 const int,那么您可以使用指针来更改 const int 的值,这会很糟糕。例如:
int const x = 0;
int * const p = &x;
*p = 42;
printf("%d", x); // would print 42!
幸运的是,上述情况是不允许的。