Czy istnieje różnica między definiowaniem operatora globalnego, który pobiera dwa odwołania do klasy i definiującym operatora składowego, który przyjmuje tylko prawy operand?Różnica między operatorem globalnym a operatorem członkowskim
Globalny:
class X
{
public:
int value;
};
bool operator==(X& left, X& right)
{
return left.value == right.value;
};
użytkownika:
class X
{
int value;
bool operator==(X& right)
{
return value == right.value;
};
}
Jest to dobra praktyka, aby zadeklarować argumenty nie tylko odniesienie, ale także const, ilekroć jesteś pewien, że możesz. Operatory porównania mogą być stałe i na pewno przyjmować odwołania do stałych. (Jeśli nic innego, to jest obiecujące dla kompilatora, który pozwala mu robić więcej optymalizacji.) –