首頁 > 後端開發 > C++ > 為什麼非常量成員函數在 `std::set` 中與 Const 物件一起使用時會導致錯誤?

為什麼非常量成員函數在 `std::set` 中與 Const 物件一起使用時會導致錯誤?

Patricia Arquette
發布: 2024-12-15 12:56:30
原創
750 人瀏覽過

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

將非常量成員函數傳遞給常數物件時出錯

在提供的程式碼中,使用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 上安全地呼叫

此外,也建議將

inline bool operator< (const StudentT &s1, const StudentT &s2) {
    return s1.getId() < s2.getId();
}
登入後複製
運算子比較函數const,透過將const引用傳遞給其參數:

這些修改將防止意外錯誤並確保程式碼正確運作。

以上是為什麼非常量成員函數在 `std::set` 中與 Const 物件一起使用時會導致錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板