为什么以下是非法的?
extern const int size = 1024;
int * const ptr = &size;
当然应该允许指向非const数据的指针指向const int(只是不是相反)?
这是来自C ++ Gotchas项目#18
答案 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!
幸运的是,上述情况是不允许的。