ホームページ > バックエンド開発 > C++ > 非クラス戻り型のトップレベルの const が冗長に見えるのはなぜですか?

非クラス戻り型のトップレベルの const が冗長に見えるのはなぜですか?

Linda Hamilton
リリース: 2024-11-04 07:56:02
オリジナル
1002 人が閲覧しました

Why Does Top-Level Const on Non-Class Return Types Seem Redundant?

非クラスの戻り型には 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート