【发布时间】:2014-07-18 14:02:03
【问题描述】:
任何人都可以在 STL sort 算法的上下文中解释这种行为吗?
如果 operator < 未定义 const 它会给出错误,
error: passing ‘const B’ as ‘this’ argument of ‘bool B::operator<(const B&)’ discards qualifiers [-fpermissive]
while (__pivot < *__last)
sort 算法 lhs const 是对象还是 sort 是 const 方法?
class B
{
public:
...
bool operator < (const B& b) const // why const required here?
{
return (m_i < b.m_i);
}
...
private:
int m_i;
int m_j;
};
int main()
{
vector<B> Bvec2 {B(5), B(3), B(30), B(20), B(8)};
std::sort(Bvec2.begin(), Bvec2.end());
...
}
【问题讨论】:
-
因为比较两个对象不应该改变其中任何一个。
-
@juanchopanza 同意,但我的问题是
sort在内部做了什么来强制执行此操作? -
它可以像调用一个函数一样简单,该函数采用
const对向量元素的引用。我不认为这是标准规定的,但这是有道理的。 -
虽然很容易想象一个排序实现允许比较运算符不被声明 const,但如果不是,任何基于比较的排序操作怎么能提供任何保证逻辑上的常量?我认为这在技术上可能是实现中的一个错误,因为我在 C++ 标准中看到很多地方他们谈论操作在逻辑上是 const(而不是在语法上)
标签: c++ stl operator-overloading