前缀++与后缀++的本指区别是什么?
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;
}