「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ で Const オブジェクトを非 Const メンバー関数に渡すと修飾子失格エラーが発生するのはなぜですか?

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

2025 年 1 月 14 日に公開
ブラウズ:195

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 としてマークされていないため、コンパイラはこの問題を検出します。

Solution

エラーを解決するには、getId() 関数と getName() 関数を const:

int getId() const {
    return id;
}

string getName() const {
    return name;
}

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

補足

  • 同様に、演算子
inline bool operator
  • メンバー関数に (オブジェクトではなく) 参照を渡すことは、パフォーマンスとコードの正確性を考慮して推奨されます。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3