全局变量增量在 C++ 中的工作原理

how does global variable increment work in c++

本文关键字:工作 C++ 全局变量      更新时间:2023-10-16
#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一样?

No. counter++更接近(counter = counter + 1) - 1<</p>

div class="answers">

这是因为后缀和前缀表示法之间的差异。在后缀表示法中,这是您当前拥有的,它保存变量的副本,然后为当前调用以下的任何调用递增变量,但在当前调用时,它看起来保持不变。

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

int f() { return ++counter; }

您将看到预期的结果。

首先,您确定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++,除非程序逻辑需要相反的情况。