Ordre d'évaluation des arguments dans std::cout
Comprendre comment les arguments de fonction sont évalués en C est crucial pour éviter les surprises dans votre code. Dans le contexte de std::cout, l'ordre d'évaluation des arguments peut prêter à confusion, comme illustré dans l'exemple suivant :
#include <iostream> bool foo(double& m) { m = 1.0; return true; } int main() { double test = 0.0; std::cout << "Value of test is : \t" << test << "\tReturn value of function is : " << foo(test) << "\tValue of test : " << test << std::endl; return 0; }
Ce code peut sembler imprimer la valeur de test avant et après l'appel de foo fonction. Cependant, le résultat suggère le contraire :
Value of test is : 1 Return value of function is : 1 Value of test : 0
Ce comportement est dû à l'ordre d'évaluation non spécifié dans une expression. Bien qu'il puisse sembler intuitif que l'argument le plus à droite (la valeur du test) soit évalué en premier, cela n'est pas garanti.
Pour garantir l'ordre d'évaluation souhaité, divisez explicitement l'expression en instructions distinctes, comme montré ci-dessous :
double value = test; std::cout << "Value of test is : \t" << value << "\tReturn value of function is : " << foo(test) << "\tValue of test : " << test << std::endl;
Cela garantit que la valeur de test est copiée dans value avant que la fonction foo ne soit appelée. En conséquence, le résultat reflète désormais avec précision l’ordre d’évaluation attendu :
Value of test is : 0 Return value of function is : 1 Value of test : 1
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!