让我们来看看这条线是如何工作的更详细。首先,编译器将一个具有相同值的临时副本复制为5。然后,它将原来的×从5增加到6。然后,编译器将计算结果为5,并将该值赋给Y,然后将临时副本丢弃。
因此,结束时的值为5,和*结束的值6。
在第三行,x和y是递增/递减之前,他们的评价,所以他们的新值打印由cout。在第五行,一个原始值的临时副本(x = 6,y = 4)发送给cout,然后原来的x和y是递增的。这就是为什么从后缀式操作符的结果没有改变到下一行。
副作用
副作用是一个操作符、表达式、语句或函数的结果,即使在操作符、表达式、语句或函数完成后仍继续存在。
副作用可能是有用的:
因此,结束时的值为5,和*结束的值6。
这里是另一个例子显示的差异之间的前缀和后缀版本:
1
2
3
4
5
6
int x = 5, y = 5;
cout << x << " " << y << endl;
cout << ++x << " " << --y << endl; // prefix
cout << x << " " << y << endl;
cout << x++ << " " << y-- << endl; // postfix
cout << x << " " << y << endl;
在第三行,x和y是递增/递减之前,他们的评价,所以他们的新值打印由cout。在第五行,一个原始值的临时副本(x = 6,y = 4)发送给cout,然后原来的x和y是递增的。这就是为什么从后缀式操作符的结果没有改变到下一行。
副作用
副作用是一个操作符、表达式、语句或函数的结果,即使在操作符、表达式、语句或函数完成后仍继续存在。
副作用可能是有用的:
2
3
4
5
6
7
8
9
10
11
12
13
int add(int x, int y)
{
return x + y;
}
int main()
{
int x = 5;
int value = add(x, ++x); // is this 5 + 6, or 6 + 6? It depends on what order your compiler evaluates the parameters in
std::cout << value; // value could be 11 or 12, depending on how the above line evaluates!
return 0;
}