#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
相同?
答案 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 ++,除非程序逻辑需要相反。