1

以下はなぜ違法なのですか?

extern const int size = 1024;

int * const ptr = &size;

確かに、非 const データへのポインターは、const int を指すことを許可されるべきです (その逆ではありません)。

これは C++ Gotchas アイテム #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 データへのポインターが 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 に答える