Maison >développement back-end >C++ >Comment le `std::cout` de C évalue-t-il les arguments et pourquoi l'ordre est-il important ?

Comment le `std::cout` de C évalue-t-il les arguments et pourquoi l'ordre est-il important ?

DDD
DDDoriginal
2025-01-05 08:18:43572parcourir

How Does C  's `std::cout` Evaluate Arguments, and Why Does Order Matter?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn