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对象,或者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());
...
}
Run Code Online (Sandbox Code Playgroud)
将函数标记为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, 在那里.