2011-12-05 13 views
0

例:参照(constポインタ)が利用可能なときにconstキーワードを使用して定数ポインタを宣言するのはなぜですか?

ポインタで変更できるオブジェクトを指す定数ポインタを作成できます。ポインタを再割り当てすることはできません。

MyObj const *ptrObj = MyObj2 

は、なぜ私が上でこれを使用します。

MyObj &ptrObj = MyObj2 
+2

コンパイルされていないため、表示されません。 'MyObj'が型であり、' MyObj2'が 'MyObj'のインスタンスであると仮定すると、あなたはまだ'& 'が必要です... – AJG85

答えて

4

あなたはconstポインタがない持っている何、それはconstオブジェクトへのポインタだ - です、ポインタは変更できますがオブジェクトは変更できません。 constポインタは次のようになります。

MyObj *const ptrObj = &MyObj2; 

は、あなたが参照の上にそれを好むかもしれない理由として、あなたが何かのためにNULL特別な値を使用しての柔軟性をお勧めします - あなたが参照しているを得ることはありません。

2

あなたは間違っています。参照があり、実際に

T * const p = &x; // OK, cannot change p 
T & r = x;  // "same thing" 
p->mutate();  // OK, *p is mutable 

:何が本当にしたいことは可変オブジェクトへ定数ポインタである

T const * p; 
p = 0;   // OK, p isn't const 
p->mutate();  // Error! *p is const 
T const & r = *p; // "same thing" 

:何あなたが持っていることは定数オブジェクトへ可変ポインタであります定数ポインタと道徳的に等価なもの、すなわちT &T * constとの間の定数バージョンT const &T const * const

アドバイスを受けることを強くお勧めする場合は、「ポインタを使用しない」と言います。

1

ポインタと参照の重要な違いは、参照できるオブジェクトの数です。参照は常に正確に1つのオブジェクトを参照します。ポインタはゼロ(ポインタがヌルの場合)、1つ(ポインタに1つのオブジェクトの位置が割り当てられた場合)、またはn個のオブジェクト(ポインタが配列内のある点に割り当てられた場合)を参照することがあります。

0からn個のオブジェクトを参照するポインターの機能は、ポインターが表すことができるものがより柔軟であることを意味します。ポインターの余分な柔軟性が必要でない場合は、一般に参照を使用する方が良いです。そうすれば、誰かがあなたのコードを読んでいても、ポインタがゼロ、1つまたはn個のオブジェクトを参照しているかどうかを調べる必要はありません。

関連する問題