Betrachten Sie den folgenden Code ein:C++ Verschiebungs-Operator Vorrang Seltsamkeit
typedef vector<int> intVec;
intVec& operator<<(intVec& dst, const int i) {
dst.push_back(i);
return dst;
}
int intResult0() {
return 23;
}
int intResult1() {
return 42;
}
// main
intVec v;
v << intResult0() << intResult1();
Das Seltsame ist, dass der Compiler Code erzeugt, der intResult1
VORintResult0
(mit neuesten VC und gcc getestet) auswertet. Warum würde der Compiler das tun? Auf diese Weise wird die Zeit zwischen der Auswertung und der Verwendung der jeweiligen Werte (unnötigerweise) erhöht (& thgr;), d. H. 42 wird zuerst abgerufen, aber zuletzt zu dem Vektor geschoben. Dient der C++ - Standard dazu?
heh, ich lief nur in dieser letzten Nacht mit Operator + = T Die verwirrende Sache für mich ist, dass man beim Lesen des Codes erwartet, dass intResult1 als zweiter aufgerufen werden muss, da es den Wert verwendet, der von intResult0 für sein erstes Argument zurückgegeben wird. – Dolphin