#include<iostream>
using namespace std;
int main()
{
int val1;
cout << "Enter val1: " << endl;
cin >> val1;
cout << "++val1 + ++ val1 = " << ++val1 + ++val1 << endl;
cout << "val1 : " << val1 << endl;
int val2, val3;
cout << "Enter val2 、 val3: " << endl;
cin >> val2 >> val3;
cout << "++val2 + ++val3 = " << ++val2 + ++val3 << endl;
cout << "val2 :" << val2 << "\t val3: " << val3 << endl;
int val4;
cout << "Enter val4: " << endl;
cin >> val4;
cout << "val4++ + val4++ = " << val4++ + val4++ << endl;
cout << "val4 :" << val4 << endl;
int val5, val6;
cout << "Enter val5 、 val6 : " << endl;
cin >> val5 >> val6;
cout << "val5++ + val6++ = " << val5++ + val6++ << endl;
cout << "val5 :" << val5 << "\t val6: " << val6 << endl;
int sum = 0;
int v1;
cout << "Enter v1 : " << endl;
cin >> v1;
sum = ++v1 + ++v1;
cout << "sum = ++v1 + ++v1 :\t " << sum << endl;
cout << "v1: " << v1 << endl;
sum = 0;
int v2, v3;
cout << "Enter v2、 v3 : \t" << endl;
cin >> v2 >> v3;
sum = ++v2 + ++v3;
cout << "sum = ++v2 + ++v3 : \t" << sum << endl;
cout << "v2: " << v2 << "\tv3: " << v3 << endl;
sum = 0;
int v4;
cout << "Enter v4: " << endl;
cin >> v4;
sum = v4++ + v4++;
cout << "sum = v4++ + v4++ : \t " << sum << endl;
cout << "v4: " << v4 << endl;
sum = 0;
int v5, v6;
cout << "Enter v5、 v6: " << endl;
cin >> v5 >> v6;
sum = v5++ + v6++;
cout << " sum = v5++ + v6++ : \t " << sum << endl;
cout << "v5: " << v5 << "\tv6: " << v6 << endl;
return 0;
}
/*
运行结果:
Enter val1:
1
++val1 + ++ val1 = 5
val1 : 3
Enter val2 、 val3:
1 2
++val2 + ++val3 = 5
val2 :2 val3: 3
Enter val4:
1
val4++ + val4++ = 2
val4 :2
Enter val5 、 val6 :
1 2
val5++ + val6++ = 3
val5 :2 val6: 3
Enter v1 :
1
sum = ++v1 + ++v1 : 5
v1: 3
Enter v2、 v3 :
1 2
sum = ++v2 + ++v3 : 5
v2: 2 v3: 3
Enter v4:
1
sum = v4++ + v4++ : 2
v4: 2
Enter v5、 v6:
1 2
sum = v5++ + v6++ : 3
v5: 2 v6: 3
Process returned 0 (0x0) execution time : 10.117 s
Press any key to continue.
分析:
综上所述,上述可分为两类
前提条件a = 1, b = 2;
1:直接cout << ++a + ++a;与先执行sum = ++a + ++a;在执行cout << sum; 结果一致:最终都输出 5 ,并且结束后 a 的值都为 3 。
即前自增操作时,程序需要做的工作更少,只需返回加1后的结果即可。
2:直接cout << a++ + a++;与先执行sum =a++ + a++;再执行cout << sum; 结果一致:最终都输出 2 ,并且结束后 a 的值都为 2 。
即后置操作符必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果(由本测试来看在一个表达式中,同一变量后置操
作仅执行一次……,在递归函数返回值中如果调用后置参数的递归又会怎样???有待测试)。
作为对比使过程更为清晰:设两个变量a = 1, b = 2;
cout << ++a + ++b << 5; a = 2, b = 3;与sum = ++a + ++b = 5; a= 2, b = 3;
cout << a++ + b++ << 3; a = 2, b = 3;与sum = a++ + b++ = 3; a = 2,b = 3;
额外话;
对于int型对象和指针,编译器可优化掉后置操作符的额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价
。因此,养成使用前置操作这个好习惯,就不必操心性能差异的问题。
using namespace std;
int main()
{
int val1;
cout << "Enter val1: " << endl;
cin >> val1;
cout << "++val1 + ++ val1 = " << ++val1 + ++val1 << endl;
cout << "val1 : " << val1 << endl;
int val2, val3;
cout << "Enter val2 、 val3: " << endl;
cin >> val2 >> val3;
cout << "++val2 + ++val3 = " << ++val2 + ++val3 << endl;
cout << "val2 :" << val2 << "\t val3: " << val3 << endl;
int val4;
cout << "Enter val4: " << endl;
cin >> val4;
cout << "val4++ + val4++ = " << val4++ + val4++ << endl;
cout << "val4 :" << val4 << endl;
int val5, val6;
cout << "Enter val5 、 val6 : " << endl;
cin >> val5 >> val6;
cout << "val5++ + val6++ = " << val5++ + val6++ << endl;
cout << "val5 :" << val5 << "\t val6: " << val6 << endl;
int sum = 0;
int v1;
cout << "Enter v1 : " << endl;
cin >> v1;
sum = ++v1 + ++v1;
cout << "sum = ++v1 + ++v1 :\t " << sum << endl;
cout << "v1: " << v1 << endl;
sum = 0;
int v2, v3;
cout << "Enter v2、 v3 : \t" << endl;
cin >> v2 >> v3;
sum = ++v2 + ++v3;
cout << "sum = ++v2 + ++v3 : \t" << sum << endl;
cout << "v2: " << v2 << "\tv3: " << v3 << endl;
sum = 0;
int v4;
cout << "Enter v4: " << endl;
cin >> v4;
sum = v4++ + v4++;
cout << "sum = v4++ + v4++ : \t " << sum << endl;
cout << "v4: " << v4 << endl;
sum = 0;
int v5, v6;
cout << "Enter v5、 v6: " << endl;
cin >> v5 >> v6;
sum = v5++ + v6++;
cout << " sum = v5++ + v6++ : \t " << sum << endl;
cout << "v5: " << v5 << "\tv6: " << v6 << endl;
return 0;
}
/*
运行结果:
Enter val1:
1
++val1 + ++ val1 = 5
val1 : 3
Enter val2 、 val3:
1 2
++val2 + ++val3 = 5
val2 :2 val3: 3
Enter val4:
1
val4++ + val4++ = 2
val4 :2
Enter val5 、 val6 :
1 2
val5++ + val6++ = 3
val5 :2 val6: 3
Enter v1 :
1
sum = ++v1 + ++v1 : 5
v1: 3
Enter v2、 v3 :
1 2
sum = ++v2 + ++v3 : 5
v2: 2 v3: 3
Enter v4:
1
sum = v4++ + v4++ : 2
v4: 2
Enter v5、 v6:
1 2
sum = v5++ + v6++ : 3
v5: 2 v6: 3
Process returned 0 (0x0) execution time : 10.117 s
Press any key to continue.
分析:
综上所述,上述可分为两类
前提条件a = 1, b = 2;
1:直接cout << ++a + ++a;与先执行sum = ++a + ++a;在执行cout << sum; 结果一致:最终都输出 5 ,并且结束后 a 的值都为 3 。
即前自增操作时,程序需要做的工作更少,只需返回加1后的结果即可。
2:直接cout << a++ + a++;与先执行sum =a++ + a++;再执行cout << sum; 结果一致:最终都输出 2 ,并且结束后 a 的值都为 2 。
即后置操作符必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果(由本测试来看在一个表达式中,同一变量后置操
作仅执行一次……,在递归函数返回值中如果调用后置参数的递归又会怎样???有待测试)。
作为对比使过程更为清晰:设两个变量a = 1, b = 2;
cout << ++a + ++b << 5; a = 2, b = 3;与sum = ++a + ++b = 5; a= 2, b = 3;
cout << a++ + b++ << 3; a = 2, b = 3;与sum = a++ + b++ = 3; a = 2,b = 3;
额外话;
对于int型对象和指针,编译器可优化掉后置操作符的额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价
。因此,养成使用前置操作这个好习惯,就不必操心性能差异的问题。
*/
如果您对本文满意,请回复,谢谢^ . ^ . ^ . ^
同时欢迎提出宝贵意见,以帮助我改进,不胜感激!!!
——桑海整理