一个原始值的临时副本!

来源:互联网 发布:港澳台电视直播软件下载 编辑:程序博客网 时间:2024/06/09 13:39
让我们来看看这最后一行是如何工作的更详细。首先,编译器将启动一个与x(5)相同的值的x的临时副本。然后它将原来的x从5增加到6。然后编译器评估临时副本,该副本计算为5,并将该值赋给Y。然后将临时副本丢弃。
因此,Y结束了5的值,x结束的值为6。

这里是另一个例子显示的差异之间的前缀和后缀版本:

int x = 5, y = 5;cout << x << " " << y << endl;cout << ++x << " " << --y << endl; // prefixcout << x << " " << y << endl;cout << x++ << " " << y-- << endl; // postfixcout << x << " " << y << endl;

在第三行中,x和y是递增/递减之前,他们的评价,所以他们的新值打印由cout。在第五行,一个原始值的临时副本(x = 6,y = 4)发送给cout,然后原来的x和y是递增的。这就是为什么从后缀式操作符的结果没有改变到下一行。
规则:有利于后递增和后递减的预增量和预减量。前缀版本不仅更加高效,你就不太可能遇到奇怪的问题。
副作用
一个函数或表达式被称为有一个副作用,如果它修改一些状态(例如,在内存中的任何存储信息),输入或输出,或调用有副作用的其他功能。
大部分时间,副作用是有用的:

12345678910111213int 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 function arguments in     std::cout << value; // value could be 11 or 12, depending on how the above line evaluates!    return 0;}


0 0