全局变量增量如何在c ++中工作

时间:2017-04-14 01:29:56

标签: c++

#include <iostream>

int counter = 0;

int f(){
    return counter++;
}

int main(){
    std::cout << f(); //output = 0
    std::cout << f()+f(); // output = 1;
    return 0;
}

这可能是一个愚蠢的问题,但为什么在第一种情况下,f()等于1而不是0? 我认为counter++counter = counter + 1相同?

3 个答案:

答案 0 :(得分:1)

没有。 (counter = counter + 1) - 1更接近test

答案 1 :(得分:0)

它是因为后缀和前缀表示法之间的区别。在后缀表示法中,你现在拥有它,它会保存变量的副本,然后为当前调用之下的任何调用增加变量,但是在当前调用时它将保持不变。

这就是为什么当我们std::cout << f(); //output = 0输出0时,因为计数器只会在此行之后递增。如果您将f更改为:

int f() { return ++counter; }

您将看到预期的结果。

答案 2 :(得分:0)

首先,您确定f() + f()会导致1。我认为它应该是3

关于你的主要问题:

后期增量适用于原始值的副本。所以f()中的函数表现为:

int f()
{
   int temp = counter;
   counter = counter + 1;
   return temp;
}

或@kmkaplan巧妙地指出:

int f()
{
   return (counter = counter + 1 ) - 1;
}

它类似于语义:

int f = 0;

cout << f++;  // f original value is first displayed.
cout << ++f;  // f is incremented then displayed.

一般来说,我更喜欢使用+ n而不是n ++,除非程序逻辑需要相反。