2017-05-04 1 views
1
int x; 
int fun1() 
{ 
    x=x+10; 
    return x; 
} 
int main() 
{ 
    x=5; 
    cout<<x; 
    cout<<fun1(); 
} 

dies erzeugt 5 und 15, währendmehrere Anweisungen in einem einzigen cout zu unterschiedlichen Ergebnissen führen

cout<<x<<fun1(); 

dies erzeugt 15 und 15. Bitte erläutern. Danke

+2

diese Antwort Siehe für die Reihenfolge der Auswertung: http://stackoverflow.com/questions/10782863/what-is-the-correct-answer-for-cout-cc – Gerriet

+0

Insert Zeilenumbrüche in der Ausgabe zur Klarheit. Im Augenblick wird die Ausgabe z.B. 515 ohne \ n. – Brandin

+0

Vielleicht wird es klarer, wenn Sie den tatsächlichen ['operator <<'] (http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2) aufschreien, wie sie definiert sind. Versuchen Sie, sie als verschachtelte Funktionsaufrufe zu schreiben. Die ausgewählte Antwort auf die von Gerriet verknüpfte Frage geht dabei detailliert vor. – WhozCraig

Antwort

0

In der C++ - Referenz ist die Reihenfolge der Auswertung der Argumente von std::cout nicht spezifiziert. Es ist nicht von links nach rechts, von rechts nach links oder irgendetwas anderes.

Bitte vermeiden Sie dies. Verwenden Sie stattdessen separate Anrufe.

see also

+1

cout << a << b << c hat eine wohldefinierte Reihenfolge. Das Problem ist der Funktionsaufruf, nicht die Bestellung per se. – Brandin

+0

@Brandin, was ist mit '' std :: cout << C++ << c; '' [link] (http://stackoverflow.com/questions/10782863/what-is-the-correct-answer-for-cout -cc). Funktion nicht nur anrufen, sondern Bewertungen im Allgemeinen. – v78

+0

@BenjaminLindley, danke. korrigierte den mehrdeutigen Satz. – v78

Verwandte Themen