Considérons le code suivant:C opérateur de décalage de priorité de bizarrerie
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();
La chose étrange est que le compilateur génère un code, qui évalue intResult1
AVANTintResult0
(testé avec les plus récentes gcc und VC). Pourquoi le compilateur ferait-il cela? En faisant cela, le temps entre l'évaluation et l'utilisation des valeurs respectives est (inutilement) augmenté (?), C'est-à-dire que l'on extrait en premier le 42, mais que l'on pousse le dernier au vecteur. Est-ce que le standard C++ le dicte?
heh, je viens couru dans cette dernière nuit avec l'opérateur + = T La chose confuse pour moi est qu'en lisant le code, on s'attendrait à ce que intResult1 soit appelé second parce qu'il utilise la valeur retournée par intResult0 pour son premier argument. – Dolphin