c++的n=n++问题,和java里面的n=n++问题
一个面试题多次循环n=n++;最后的n是多少,是原值。百思不得解,记录一下心得
public class Test {
public static void main(String[] args) {
int n = 5;
for(int i = 0; i<5; i++){
n = n++;
System.out.println(n);
}
System.out.println(n);
}
}
输出结果为:
5
5
5
5
5
5
原因:n++是一个表达式,有返回值的,返回值是n。Java里面n=n++的执行步骤是开辟一个内存存储原值,然后该内存的值加1,最后返回n的原值,
n=n++;
编译成class文件后是int var3=n+1; n=n;
两句。真正赋值的动作其实是在自增之后进行的。
在C++中,n=n++和n++其实是等效的
#include<iostream>
using std::cout;
using std::endl;
int main()
{
int n = 5;
for (int i = 0; i < 5; i++) {
n = n++;
}
cout << n << endl;
return 0;
}
最后的结果是10
这是c++里面 i++和 ++i 的理论实现
class T
{
public :
//prefix increment
T & operator++() // ++A
{
_x++;
return *this ;
}
//postfix increment
T operator++(int) // A++ 接收一个int类型的附加参数
{
T temp = *this ; //这里使用零时变量
++*this;
return temp ;
}
private:
int _x;
} ;