Ich habe Schwierigkeiten, die Reihenfolge der Aufrufe in dem Code unten zu verstehen. Ich hatte erwartet, die Ausgabe unterReihenfolge der Ausführung im Operator <<
A1B2
zu sehen, während ich sehen kann, dass die Ausgabe ich erhalte, ist
BA12
Ich dachte, dass der Anruf std::cout<< b->fooA() << b->fooB() << std::endl
gleichkam
std::cout.operator<<(b->fooA()).operator<< (b->fooB())
zu nennen aber ich kann sehen, dass dies nicht der Fall ist. Können Sie mir helfen, besser zu verstehen, wie dies funktioniert und die Beziehung mit der globalen operator<<
? Wird dieser letzte jemals in dieser Reihenfolge aufgerufen?
Grüße
AFAG
#include <iostream>
struct cbase{
int fooA(){
std::cout<<"A";
return 1;
}
int fooB(){
std::cout <<"B";
return 2;
}
};
void printcbase(cbase* b){
std::cout << b->fooA() << b->fooB() << std::endl;
}
int main(){
cbase b;
printcbase(&b);
}
Sie haben Recht, wenn Sie denken, dass es dem entspricht. Sie machen jedoch die falsche Annahme, dass es eine klar definierte Reihenfolge der Bewertung gibt. Es ist nicht.Das ist alles. –
Reihenfolge der Teilausdruck-Auswertung ist hier nicht garantiert (und es * muss * ein Duplikat sein, aber ich kann gerade keine gute kanonische Frage finden) –
'AB12' oder' BA12' sind mögliche Ausgaben. 'A1B2' ist nicht (hoffentlich). – jrok