将const int分配给指向int的const指针是非法的吗?

时间:2013-06-30 17:23:06

标签: c++ pointers const

为什么以下是非法的?

extern const int size = 1024;

int * const ptr = &size;

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

这是来自C ++ Gotchas项目#18

2 个答案:

答案 0 :(得分:6)

如果你真的是指其中一个

const int * const ptr = &size; 
const int * ptr = &size;

这是合法的。你的是非法的。因为它不是你能做到的

int * ptr const = &size;
*ptr = 42;

和bah,你的const刚刚改变了。

让我们看看相反的方式:

int i = 1234; // mutable 
const int * ptr = &i; // allowed: forming more const-qualified pointer
*i = 42; // will not compile

我们不能在这条道路上受到伤害。

答案 1 :(得分:0)

如果允许指向nonconst数据的指针指向const int,那么你可以使用指针来改变const int的值,这将是不好的。例如:

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

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

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