您的位置:首页 > 其它

cout输出操作符求值顺序

2011-12-06 13:40 225 查看
在逛论坛的时候发现这个问题的,然后就动手查了下,也写了下代码测试

不过首先应该声明的是 : 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 此规则也适用于其它的一些输出函数或表达式.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  fun 编译器 测试 c