为什么这段代码会返回0和1?

max*_*mus -2 c c++ postfix-operator

我知道使用变量后的postfix运算符增量值.但在这种情况下,它是一个有效的声明吗?因为看起来我在返回语句后修改变量.

#include <iostream>

using namespace std;

int val = 0;

int foo()
{
        return val++;
}

int main()
{
        cout<<foo();
        cout<<endl<<val;
}
Run Code Online (Sandbox Code Playgroud)

任何详细说明都会有所帮助.

eml*_*lai 6

return val++第一次返回val然后递增它并不完全正确.表达式val++增加值的值val,但计算为旧的值val.

您可以将postfix ++视为使用辅助变量来保存旧值的函数:

int temp = val; // save old value to temp
++val;          // increment actual value
return temp;    // evaluate to old value
Run Code Online (Sandbox Code Playgroud)