为什么重载'operator <'应该是类的const?

dee*_*ive 3 c++ stl operator-overloading

任何人都可以在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对象,或者sortconst方法?

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());
  ...
}
Run Code Online (Sandbox Code Playgroud)

Zan*_*ynx 6

将函数标记为const可以保证它不会更改对象.所以它可以用在const对象上.

STL几乎肯定将参数作为const,因为这是明智之举.

定义operator<为const 不应该让你受伤,因为我无法想象有一个改变对象的小于运算符.那只是愚蠢的.

如果你想确切地知道在Fedora 20机器上从libstdc ++ bits/stl_algo.h复制了一些代码:

  /// This is a helper function...
  template<typename _RandomAccessIterator, typename _Tp, typename _Compare>
    _RandomAccessIterator
    __unguarded_partition(_RandomAccessIterator __first,
                          _RandomAccessIterator __last,
                          const _Tp& __pivot, _Compare __comp)
Run Code Online (Sandbox Code Playgroud)

const _Tp& __pivot, 在那里.