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;
} ;
posted on 2021-05-12 19:57  雾恋过往  阅读(447)  评论(0编辑  收藏  举报

Live2D