重载operator〈(例如)在类内部或外部有什么区别?
为什么std map使用外部实现?但我的比较用的是内部的?
如何知道需要使用哪个实现?
代码底部是代码测试它,我用。
class Foo
{
public:
Foo() {}
Foo(int val) : a(val) {}
int getA() const { return a; }
void setA(const int& val) { a = val; }
inline bool operator<(const Foo& f)
{
cout<<"operator< inside\n";
return a < f.getA();
}
private:
int a = 1;
};
inline bool operator<(const Foo& f1, const Foo& f2)
{
cout<<"operator< outside\n";
return f1.getA() < f2.getA();
}
std::map<Foo, const char*> fMap = { {Foo(2), "Val 2"}, {Foo(3), "Val 3"} };
int main()
{
cout<<"Hello World\n";
Foo f, f2;
f.setA(3);
f2.setA(7);
cout << (f < f2) << "\n";
return 0;
}
Output:
operator< outside
operator< outside
Hello World
operator<
inside 1
1条答案
按热度按时间qni6mghb1#
在
std::map
中,键是const
。Foo::operator<
不是const限定的,所以不能在const对象上调用它。这就是不使用它而使用全局运算符的原因。要解决此问题,只需将operator <
更改为