救命?为什么输出是这样的?

Xia*_*ong 3 c++ global-variables

#include <iostream>
using namespace std;

int a = 8;

int g()
{
    a++; 
    return a - 1;
}

int f()
{
    a++;
    return a;
}

int main()
{
    cout << g() << " " << f() << " " << g() + f() << endl;
    system("PAUSE");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出为"11 11 18"

小智 9

函数的评估顺序在C++中未指定.在代码中:

cout << g() << " " << f() << " " << g() + f() << endl;
Run Code Online (Sandbox Code Playgroud)

编译器可以发出代码来调用f(),f(),g(),g()然后添加结果.或者它可以做其他事情.

这与使用cout,BTW没有什么关系 - 如果你编写这样的代码:

x = a() + b() * c();
Run Code Online (Sandbox Code Playgroud)

无法保证调用a,b和c的顺序.这是全局变量为坏事的众多原因之一 - 您通常无法预测将如何调用更改它们的函数.

  • "评估顺序......没有明确规定"评估顺序在标准中明确未指定.在形式上,它甚至可能动态变化,每次执行语句时都会有不同的顺序.实际上,它会根据编译器和您编译的优化级别而有所不同. (2认同)