以下はなぜ違法なのですか?
extern const int size = 1024;
int * const ptr = &size;
確かに、非 const データへのポインターは、const int を指すことを許可されるべきです (その逆ではありません)。
これは C++ Gotchas アイテム #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 データへのポインターが const int を指すことが許可されている場合、ポインターを使用して const int の値を変更できますが、これは悪いことです。例えば:
int const x = 0;
int * const p = &x;
*p = 42;
printf("%d", x); // would print 42!
幸いなことに、上記は許可されていません。