可能な限り戻り値の型で const を使用することが広く受け入れられていますが、なぜ const int 演算子[ を使用するのかという疑問が生じます。 ](const intindex)const は、intoperator[](const intindex)const よりも優先されます。これを詳しく調べるために、まず戻り値の型における const の微妙な点を調べてみましょう。
「Effective C」の項目 03 で述べたように、非クラスの戻り値の最上位の const 修飾子は確かに無視されます。 int const foo(); と記述しても、戻り値の型は int のままです。ただし、参照戻り値の型には当てはまりません。 int&operator[](intindex); の違いおよび int const& 演算子[](int インデックス) 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>
このシナリオでは、gg() に付加された const 修飾子により、呼び出し元が f() などの非 const メンバー関数にアクセスすることが制限され、返されるオブジェクトの整合性が保証されます。
したがって、const オブジェクトを返すとき、戻り値の型の const 修飾子は、非参照戻り値の型の単純な場合を超えた目的を果たします。これにより、呼び出し元が一貫した方法で返されたオブジェクトと対話し、クラス設計の意図に従ってその内部状態が維持されることが保証されます。
以上がオブジェクトを返すときに、「int Operator[](const int Index) const」よりも「const int Operator[](const int Index) const」が優先されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。