ホームページ >バックエンド開発 >C++ >C で Const オブジェクトを非 Const メンバー関数に渡すと修飾子失格エラーが発生するのはなぜですか?

C で Const オブジェクトを非 Const メンバー関数に渡すと修飾子失格エラーが発生するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-08 04:27:09833ブラウズ

Why Does Passing a Const Object to a Non-Const Member Function Cause a Qualifier Disqualification Error in C  ?

Const オブジェクトを 'this' 引数として渡す: 修飾子失格エラー

C で、const オブジェクトを 'this' 引数としてメンバー関数に渡す「メンバー関数の 'this' 引数として 'const xxx' を渡すと破棄される」という結果になる可能性があります修飾子」エラー。これは、const オブジェクトでは禁止されている非 const メンバー関数がオブジェクトを変更する可能性をコンパイラが考慮するために発生します。

問題分析

提供されたコード内の場合、セット内のオブジェクトは const StudentT として保存されます。ループ内でメンバー関数 getId() および getName() にアクセスすると、オブジェクトが const であり、メンバー関数が const としてマークされていないため、コンパイラはこの問題を検出します。

解決策

エラーを解決するには、getId() 関数と getName() 関数を作成する必要がありますconst:

int getId() const {
    return id;
}

string getName() const {
    return name;
}

これにより、const ルールに違反することなく const オブジェクトで関数を呼び出すことができます。

補足事項

  • 同様に、演算子
inline bool operator< (const StudentT &amp; s1, const StudentT &amp; s2) {
    return s1.getId() < s2.getId();
}
  • パフォーマンスとコードの正確性のためには、(オブジェクトの代わりに) 参照をメンバー関数に渡すことが望ましいです。

以上がC で Const オブジェクトを非 Const メンバー関数に渡すと修飾子失格エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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