Jeśli mam zdefiniowana przez użytkownika operator+()
jak w:Błąd wywołanie zdefiniowanej przez użytkownika operatora + na tymczasowego obiektu, gdy istnieją dodatkowe wsporniki
class A
{
public:
A operator+(A)
{
return A();
}
};
wówczas następujących robót zgodnie z oczekiwaniami:
A a = A() + A();
ale g ++ - 4.7 wyświetla komunikat o błędzie:
A a = (A()) + A();
W szczególności komunikat o błędzie error: no match for ‘operator+’ in ‘+A()’
.
Wygląda na to, że wyrażenie (A())
jest ignorowane.
Moje pytanie brzmi: czy A a = (A()) + A();
ma się skompilować, a jeśli nie, dlaczego nie?
Uwaga: przydarzyło mi się, gdy robiłem #define X (Identity())
, a następnie próbowałem wykonać X + X
.
Interesujące. Jeśli nie wiesz, to jest traktowane jako jednoargumentowy operator plus, na przykład +5. – chris
@chris Teraz, gdy o tym wspomnisz, błąd nie występuje, jeśli zmienisz przykład do operatora podziału, ale robi to dla operatorów dodawania, odejmowania i mnożenia. Wygląda na to, że w tym przypadku analizowane są jednoargumentowe operatory zamiast binarnych. – SirGuy