1

为什么以下是非法的?

extern const int size = 1024;

int * const ptr = &size;

当然应该允许指向非 const 数据的指针指向 const int(而不是相反)?

这是来自 C++ Gotchas item #18

4

2 回答 2

6

如果你真的是指其中之一

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

我们不能在这条路上做坏事。

于 2013-06-30T17:24:48.357 回答
0

如果允许指向非常量数据的指针指向 const int,那么您可以使用指针来更改 const int 的值,这会很糟糕。例如:

int const x = 0;
int * const p = &x;

*p = 42;
printf("%d", x);  // would print 42!

幸运的是,上述情况是不允许的。

于 2013-06-30T17:35:43.017 回答