ホームページ > バックエンド開発 > C++ > `std::set` 内の Const オブジェクトとともに非 Const メンバー関数を使用するとエラーが発生するのはなぜですか?

`std::set` 内の Const オブジェクトとともに非 Const メンバー関数を使用するとエラーが発生するのはなぜですか?

Patricia Arquette
リリース: 2024-12-15 12:56:30
オリジナル
751 人が閲覧しました

Why Do Non-Const Member Functions Cause Errors When Used with Const Objects in a `std::set`?

非 Const メンバー関数を Const オブジェクトに渡す際のエラー

提供されたコードでは、std::set を使用して StudentT を格納しています。オブジェクト。この問題は、セット内のオブジェクトに対して getId() および getName() メンバー関数を呼び出そうとしたときに発生します。これらのメンバー関数は const としてマークされていないため、オブジェクトのデータを変更する可能性があります。ただし、std::set 内のオブジェクトは const StudentT として保存され、いかなる変更も防止されます。

コンパイラはこの不一致を検出し、次のエラー メッセージを生成します。

../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'int StudentT::getId()' discards qualifiers
../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'std::string StudentT::getName()' discards qualifiers
ログイン後にコピー

このエラーは次のことを示します。コンパイラが const オブジェクトを this 引数として非 const メンバー関数に渡そうとしていること。

解決策:

この問題を解決するには、getId() および getName() メンバー関数を次のように const になるように変更します。

int getId() const {
    return id;
}

string getName() const {
    return name;
}
ログイン後にコピー

これらの関数を const としてマークすると、オブジェクトのデータが変更されず、const で安全に呼び出すことができます。

さらに、< を作成することもお勧めします。演算子比較関数 const をパラメータに const 参照を渡すことによって作成します。

inline bool operator< (const StudentT &s1, const StudentT &s2) {
    return s1.getId() < s2.getId();
}
ログイン後にコピー

これらの変更により、予期しないエラーが防止され、コードが正しく動作することが保証されます。

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

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