2012-03-19 18 views
16

私はいくつかのコードをレビューしていますが、私はよく知らないいくつかのコードを実行しました。いくつかの検索の後、私はこれがなぜ行われたのか、この宣言の利点の例を思い付くことができませんでした。C++ Constポインタ宣言

myClass const * const myPtr = myClass->getPointer(); 

これはconstポインタまたは全く異なるものの宣言ですか?

答えて

24

これは、constmyClassへのポインタ「myPtr」がconstであることを意味します。これは、のポインタがを指しているか、のポインタが0以外ののポインタを返すように変更できないことを意味します(戻り値myClass->getPointer()によって)。そう、はい、あなたは基本的に正しいです。加えて、constオブジェクトも指しています(あなたが知っている限り、それは本当に非constの下にあります)。

constは、左側のアイテムに適用されます(または、左側にアイテムがない場合は右側にアイテムがあります)。最初のconstmyClassconst(ポインタの意味は変更できません)とconst*(ポインタ自体は変更できません)となります。

+6

「は、constがその左に項目に適用されます覚えておいてください(あるいは全く項目がない場合その左にある項目を右に)」 - これは、constを分類する際に見た、最も優れた、最も簡単で、最も簡単な経験則です。 – linbianxiaocao

2

セスはお金である間接参照ポインタのメンバ関数を呼び出すことによって返された一定値に一定のポインタを宣言します。 Duramechoにも役立つかもしれない背景があります。

3

キーワードは、行の最初の単語でない限り、constキーワードがその左側の「単語」に適用されます。その場合、その単語はその右側の「単語」に適用されます。したがって、myClass const * const:myClass < - const、ポインタ< - const、const myClassへのポインタ。

何らかの理由で、ほとんどのコード(少なくとも私が見たもの)では、これはconst myClass * constと宣言されます。なぜ私は手がかりがありません。なぜなら、「const」は、その行の最初の単語でない限り、左側の単語に適用される例外を考慮する必要があるからです。私は、あなたが見ているコードに行を書いていることがはっきりしています。

17

いくつかのケースでは、あなたはそれがこのように書かれて表示されることがあります。

const myClass * const myPtr = myClass->getPointer(); 

は2は、一定のオブジェクトへのポインタ、すなわち一定の等価です。右から左へ読んだとき、初心者のために理解することは簡単ですので、あなたがそれを示してきたように、私は構文を好む:

Object * const obj;  // read right-to-left: const pointer to Object 
Object const * obj;  // read right-to-left: pointer to const Object 
Object const * const obj; // read right-to-left: const pointer to const Object 
関連する問題