让我们想象一个简单的类,例如:
class Foo {
public:
Foo(int b) : bar(b) {}
int bar;
friend bool operator==(const Foo& l, const Foo& r);
};
bool operator==(const Foo& l, const Foo& r) {
return l.bar == r.bar;
}
我对操作符有一种奇怪的行为==将对象与具有相同bar
值的另一个对象进行比较并不会返回true。
要理解,请考虑以下代码:
Foo& findRef(int barToFind); //Assume those functions works correctly
Foo findCopy(int barToFind);
Foo f1(1);
Foo& fRef = findRef(1);
Foo fCopy = findCopy(1);
f1 == fRef; //Will evaluate to false
f1 == fCopy; //Will evaluate to true
为什么?我错过了什么?此代码已在Visual Studio 2013上进行了测试。
谢谢
编辑:提供的是findRef函数。 findCopy完全相同,只是它没有返回引用。 MyArray保证在该计划期间存活。
Foo& findRef(int bar) {
//MyArray of type std::vector<Foo>
auto it = std::find_if(std::begin(MyArray), std::end(MyArray), [=](const Foo& f){ return f.bar == bar; });
assert(it != std::end(MyArray));
return *it;
}