首页 >后端开发 >C++ >为什么非常量成员函数在 `std::set` 中与 Const 对象一起使用时会导致错误?

为什么非常量成员函数在 `std::set` 中与 Const 对象一起使用时会导致错误?

Patricia Arquette
Patricia Arquette原创
2024-12-15 12:56:30748浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn