cout中表达式的先后执行顺序与输出顺序

#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型对象和指针,编译器可优化掉后置操作符的额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价
。因此,养成使用前置操作这个好习惯,就不必操心性能差异的问题。

*/

如果您对本文满意,请回复,谢谢^ . ^ . ^ . ^

同时欢迎提出宝贵意见,以帮助我改进,不胜感激!!!

——桑海整理


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值