ホームページ >バックエンド開発 >C++ >C ではどのような場合に const オブジェクトまたはポインタを返すべきですか?

C ではどのような場合に const オブジェクトまたはポインタを返すべきですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-29 05:46:311093ブラウズ

When Should I Return const Objects or Pointers in C  ?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。