cout输出操作符求值顺序

在逛论坛的时候发现这个问题的,然后就动手查了下,也写了下代码测试

不过首先应该声明的是 :     c++中对于cout后面的表达式的求值顺序是未定义的,具体的运行结果要由编译器的实现来决定.

本人是在vc++ 6.0下编译的.


测试代码:

#include <iostream>

using namespace std;

int fun() {
	static int xx = 0;
	++xx;
	return xx;
}

int main(void) {

	int a=1, b=2, c=3;
	char x, y;

	cout << a << b << c << endl;
	cout << fun() << fun() << fun() << endl;
	cout << (x = getchar()) << (y = getchar()) << endl;

	return 0;
}

输出结果:      123        (第一个cout语句)

                     321        (第二个cout语句)


因为在我所用的编译器下   cout后的表达式求值是从右向左的, 所以从右向左三个fun()函数的值分别是1, 2, 3

三个fun函数执行后的结果入栈.  如图:



然后从栈顶取值,  输出  3 2 1


同样的对于getchar的例子,

如果输入的是 ab ,   先从右边的getchar()函数开始读取, 因面右边的读的是a,  左边的读的是b, 入栈后


输出时从栈顶依次取值, 输出  b  a


总结:1  该现象在c++标准中是未定义行为, 运行结果完全取决于编译器实现

        2  在6.0中是先从右向左计算各表达式的值后入栈, 然后从栈顶取值输出.

        3  此规则也适用于其它的一些输出函数或表达式.



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值