【C++の相关概念】重温前缀++与后缀++

前缀++与后缀++的本指区别是什么?

int i = 0, n = 0;

int test = ++i;
//此时,test等于1,i也等于1
test = n++;
//此时,test等于0,n等于1
因此,要说本质区别就是前缀加加返回自增后的自己,而后缀加加是返回自增前的值

前缀++与后缀++的类成员函数重载是怎样的?

Complex& operator++()//前缀++重载 返回的是引用
Complex operator++(int)// 后缀++重载写法 (int) 区分前缀的必须写成int 返回是右值对象
前缀++返回引用,后缀++返回右值!!!
所以没有int i=1; i++++;这种写法
也没有int i=1; ++i++;这种写法
但是可以int i=1; i++++;结果为i=3

假设it为指针*(it++)和*(++it)和*it++和*++it和(*it)++和++(*it)的区别是什么?

  • *it++ 和 *(it++) 的结果是一样的
    先执行*it返回结果,再将it++
  • *++it 和 *(++it) 的结果是一样的
    先执行it++,再将*it返回结果
    简而言之,加不加括号没有改变结果…
  • (*it)++顾名思义就是先取*it的值,然后再把解地址处的值进行++
    (*it)++顾名思义就是先把解地址处的值进行++,然后再取*it的值

以下是测试代码以及结果:

void test(int* it, int situation) {
    
    
	if (situation == 1) {
    
    
		cout << "*it = " << *it << endl;
		int tmp = *(it++);
		cout << "tmp = *(it++) = " << tmp << endl;
		cout << "now *it = " << *it << endl;
	}
	else if (situation == 2) {
    
    
		cout << "*it = " << *it << endl;
		int tmp = *(++it);
		cout << "tmp = *(++it) = " << tmp << endl;
		cout << "now *it = " << *it << endl;
	}
	else if (situation == 3) {
    
    
		cout << "*it = " << *it << endl;
		int tmp = *it++;
		cout << "tmp = *it++ = " << tmp << endl;
		cout << "now *it = " << *it << endl;
	}
	else if (situation == 4) {
    
    
		cout << "*it = " << *it << endl;
		int tmp = *++it;
		cout << "tmp = *++it = " << tmp << endl;
		cout << "now *it = " << *it << endl;
	}
	else if (situation == 5) {
    
    
		cout << "*it = " << *it << endl;
		int tmp = (*it)++;
		cout << "tmp = (*it)++ =" << tmp << endl;
		cout << "now *it = " << *it << endl;
	}
	else if (situation == 6) {
    
    
		cout << "*it = " << *it << endl;
		int tmp = ++(*it);
		cout << "tmp = ++(*it) = " << tmp << endl;
		cout << "now *it = " << *it << endl;
	}
	else {
    
    
		cout << "error;" << endl;
	}
}

int main() {
    
    
	int a[10] = {
    
     1,2,3,4,5,6,7,8,9 };
	test(a + 3, 1);
	cout << endl;
	test(a + 3, 2);
	cout << endl;
	test(a + 3, 3);
	cout << endl;
	test(a + 3, 4);
	cout << endl;
	test(a + 3, 5);
	cout << endl;
	test(a + 3, 6);
	cout << endl;
	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45005811/article/details/113620507