Heim > Backend-Entwicklung > C++ > Wie wertet „std::cout' in C Argumente aus und warum ist die Reihenfolge wichtig?

Wie wertet „std::cout' in C Argumente aus und warum ist die Reihenfolge wichtig?

DDD
Freigeben: 2025-01-05 08:18:43
Original
565 Leute haben es durchsucht

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

Reihenfolge der Argumentauswertung in std::cout

Zu verstehen, wie Funktionsargumente in C ausgewertet werden, ist entscheidend, um Überraschungen in Ihrem Code zu vermeiden. Im Kontext von std::cout kann die Auswertungsreihenfolge der Argumente verwirrend sein, wie im folgenden Beispiel dargestellt:

#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;
}
Nach dem Login kopieren

Dieser Code scheint den Wert von test vor und nach dem Aufruf von foo auszugeben Funktion. Die Ausgabe lässt jedoch etwas anderes vermuten:

Value of test is :      1       Return value of function is : 1 Value of test : 0
Nach dem Login kopieren

Dieses Verhalten ist auf die nicht spezifizierte Reihenfolge der Auswertung in einem Ausdruck zurückzuführen. Auch wenn es intuitiv erscheinen mag, dass das am weitesten rechts stehende Argument (der Wert von test) zuerst ausgewertet wird, ist dies nicht garantiert.

Um die gewünschte Auswertungsreihenfolge sicherzustellen, teilen Sie den Ausdruck explizit in separate Anweisungen auf, z unten gezeigt:

double value = test;
std::cout << "Value of test is : \t" << value << "\tReturn value of function is : " << foo(test) <<  "\tValue of test : " << test << std::endl;
Nach dem Login kopieren

Dadurch wird sichergestellt, dass der Wert von test in value kopiert wird, bevor die foo-Funktion aufgerufen wird. Dadurch spiegelt die Ausgabe nun genau die erwartete Auswertungsreihenfolge wider:

Value of test is :      0       Return value of function is : 1 Value of test : 1
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie wertet „std::cout' in C Argumente aus und warum ist die Reihenfolge wichtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage