非クラスの戻り型には Const の利点がありますか?
C では、 const の使用が不変のベスト プラクティスとして強調されています。データの取り扱い。ただし、非クラスの戻り値の型を const で修飾しても目立った違いは生じないように見えるかもしれません:
<code class="cpp">int foo() { } const int foo() { }</code>
では、なぜこの区別が存在するのでしょうか。Bigint クラスで例示されるように:
<code class="cpp">int& operator[](const int index); const int operator[](const int index) const;</code>
説明:
非クラス関数の戻り値の型に適用されるトップレベルの const 修飾子は事実上無視され、上記の 2 つの宣言は同一になります。ただし、これは参照の場合には当てはまりません。
<code class="cpp">int& operator[](int index); int const& operator[](int index) const;</code>
このようなシナリオでは、区別は意味があります。
さらに、戻り値の型のトップレベルの const 修飾子は関数宣言でも同様に無視されます。 .
const 修飾子の関連性はクラスの戻り値の型にも及びます。関数が T const を返す場合、返されたオブジェクトに対して非 const 関数を呼び出そうとすると、以下に示すようにエラーが発生します。
<code class="cpp">class Test { public: void f(); void g() const; }; Test ff(); Test const gg(); ff().f(); // legal ff().g(); // legal gg().f(); // illegal gg().g(); // legal</code>
以上が非クラス戻り型のトップレベルの const が冗長に見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。