Why overloaded ' operator < ' should be const for class?
c++, operator-overloading, stl
Solution
Marking the function as const promises that it will not change the object. So it can be used on const objects.
The STL almost certainly takes the arguments as const, because that is the smart thing to do.
It shouldn't hurt you to define `operator<` as const because I cannot imagine having a less-than operator that changes the object. That would just be silly.
If you want to know exactly where here is some code copied out of libstdc++ bits/stl_algo.h on a Fedora 20 machine:
/// This is a helper function...
template<typename _RandomAccessIterator, typename _Tp, typename _Compare>
_RandomAccessIterator
__unguarded_partition(_RandomAccessIterator __first,
_RandomAccessIterator __last,
const _Tp& __pivot, _Compare __comp)
`const _Tp& __pivot`, right there.
Problem
Can anybody explain this behavior in context of STL `sort` algorithm? If `operator <` is not defined `const` it gives error, `error: passing ‘const B’ as ‘this’ argument of ‘bool B::operator<(const B&)’ discards qualifiers [-fpermissive] while (__pivot < *__last)` Is `sort` algo lhs `const` object or `sort` is `const` method? ``` 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()); ... } ```