Warum einen konstanten Wert zurückgeben? Betrachten Sie die folgende (und entschuldigen Sie bitte die einfallslosen Variablennamen):
struct A { int a; };
A operator+(const A& a1, const A& a2)
{
A a3 = { a1.a + a2.a };
return a3;
}
dass Erklärung operator+
gegeben, ich kann Folgendes:
A a = {2}, b = {3}, c = {4}, d = ((a+b) = c);
Das ist richtig, ich zugewiesen nur auf die temporäre A
dass wurde von operator+
zurückgegeben. Der resultierende Wert von d.a
ist 4, nicht 5.Das Ändern des Rückgabetyps von operator+
zu const A
verhindert diese Zuordnung, wodurch der Ausdruck (a+b) = c
einen Compiler-Fehler generiert.
Wenn ich versuche, einen Zeiger oder einen von einer Funktion zurückgegebenen Integer zuzuweisen, generiert mein Compiler (MSVC) einen Fehler "linker Operand muss L-Wert sein", der konsistent mit dem ARM-Compiler zu sein scheint Der Zeiger ist bedeutungslos - der Zeiger kann nicht zugewiesen werden. Aber für Klassen/Strukturen ist es anscheinend ok, nicht-konstanten Rückgabewerten zuzuordnen.
Welche Compiler- und Kompilierungsflags verwenden Sie? – Trent
RVCT 3.1 und ich weiß nicht, welche Flags die Eingeweide der Build-System-Flags sind von uns versteckt Sterbliche – Dynite