Wenn ich ein benutzerdefinierte operator+()
wie in:Fehler benutzerdefinierten Operator + auf temporäres Objekt aufgerufen wird, wenn es zusätzliche Klammern
class A
{
public:
A operator+(A)
{
return A();
}
};
Dann folgenden Werken wie erwartet:
A a = A() + A();
aber g ++ - 4.7 gibt folgende Fehlermeldung aus:
A a = (A()) + A();
Die Fehlermeldung ist insbesondere error: no match for ‘operator+’ in ‘+A()’
.
Es sieht so aus, als ob der (A())
im Ausdruck ignoriert wird.
Meine Frage ist: ist A a = (A()) + A();
soll kompilieren und wenn nicht, warum nicht?
Hinweis: Dies passierte mir, als ich #define X (Identity())
tat und dann versuchte, X + X
zu tun.
Interessant. Wenn Sie es nicht wussten, wird es als der unäre Plusoperator behandelt, z. B. +5. – chris
@chris Nun, da Sie es erwähnen, tritt der Fehler nicht auf, wenn Sie das Beispiel in den Divisionsoperator ändern, sondern für die Additions-, Subtraktions- und Multiplikationsoperatoren. Klingt so, als würde man in diesem Fall die unären Operatoren statt der binären analysieren. – SirGuy