const オブジェクトまたはポインタを返す必要がありますか?
「有効な C 項目 03」では、可能な限り const を使用することをお勧めします。たとえば、Bigint クラスは、そのデータにアクセスするために、可変バージョンと const バージョンの演算子[] 関数の両方を持つことができます。
ただし、const オブジェクトを返すことと非 const オブジェクトを返すことの区別はあまりありません。プリミティブ型を返す foo() のような単純な関数の場合はクリアです。これらは同じように動作すると思われるかもしれませんが、これは完全に真実ではありません。
トップレベルの cv 修飾子と戻り値の型
プリミティブ型の場合、top-戻り値の型のレベル cv 修飾子は無視されます。したがって、次の関数宣言は機能的に同等です。
<code class="cpp">int foo(); int const foo();</code>
どちらの関数も、戻り値の型の const 修飾子に関係なく、int を返します。
クラス型と参照
クラス型または参照を扱う場合、この区別が重要になります。 const T を返すと、呼び出し元が戻り値に対して非 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>
ここで、gg() は const Test オブジェクトを返しますが、これにより非 const メンバー関数 f() の呼び出しが禁止されます。
以上がC ではどのような場合に const オブジェクトまたはポインタを返すべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。