custom == оператор, имеет ли значение какая сторона?

JSON Spirit имеет удобный operator==

template< class Config >
bool Value_impl< Config >::operator==( const Value_impl& lhs ) const
{
if( this == &lhs ) return true;

if( type() != lhs.type() ) return false;

return v_ == lhs.v_;
}

Переменная lhs выглядит как знакомая «левая сторона» из многих других примеров, подразумевая для меня, что это не будет работать так, как ожидалось, если для того, что назначено этому оператору, нет левой стороны.

Это верно? Если так, то почему?

В любом случае, пожалуйста, указывайте стандарт.

0

Решение

b = x == y; переводит на b = x.operator==( y ); так operator==() должны быть определены для x который принимает аргумент любого типа y является.

class Y
{
public:

};

class X
{
public:

bool operator==( Y rhs )
{
return false;
}
};

void tester()
{

X x;
Y y;

bool b = x == y; // works
b = y == x;      // error

}
1

Другие решения