C++中cout输出顺序(VC6)

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

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

测试代码:

#include "stdafx.h"
#include <iostream>
using namespace std;

int add(){
	cout<<"function add"<<endl;
	return 1;
}

int sub(){
	cout<<"function sub"<<endl;
	return 2;
}

int main(int argc, char* argv[])
{
	cout<<add()<<sub()<<endl;
	return 0;
}

输出结果: 



因为在我所用的编译器下   cout后的表达式求值是从右向左的, 所以从右向左先执行sub函数,输出function sub,函数返回值为2,入栈,再执行add函数,输出function add,函数返回值为1,入栈

如图:


然后从栈顶取值, 输出12


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

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

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值