老题重提
请给出以下代码输入的结果
#include<iostream.h>
#include<stdio.h>
void main()
{
int i=10;
int k=10;
printf("%d,%d,%d,%d",++i,--i,i++,i--);
cout<<++i<<--i<<i++<<i--;
}
问题点数:0、回复次数:6Top
1 楼kpsh(kpsh)回复于 2003-12-04 17:57:54 得分 0
10,9,10,10
10,9,9,10
Top
2 楼abitz(阿奈)(老婆永远是对的!)回复于 2003-12-04 18:06:55 得分 0
这跟编译器评估表达式的顺序有关。
不过一般的编译器都是从右到左评估的。
vs.net上两个都是
10 10 9 10Top
3 楼zhengguoshan(坚持-决不放弃)回复于 2003-12-04 18:57:40 得分 0
10,9,10,10109910 这个输出结果。
Top
4 楼byyyyy(苦行僧【苦】)回复于 2003-12-04 19:09:47 得分 0
和你的编译器有关系,一般都是从右往左。Top
5 楼glacierrr(冰河纪的怪鸟)回复于 2003-12-04 20:30:34 得分 0
c++ gotchas 陷阱14:求值顺序不确定
函数对多个参数求值的顺序不固定,int i = 12;
int &ri = i;
int f(int, int);
int results = f(i, i *= 2)
可能是f(12, 24),可能是f(24, 24);
子表达式也一样
a = p() + q();
可能在q之前调用p,可能相反。
编译器厂商可以自由决定具体如何实现Top
6 楼kpsh(kpsh)回复于 2003-12-04 21:02:22 得分 0
取决于编译器
类似的
int a=1,b=2,c;
c=a+b+ ++b;
cout<<c<<endl;Top




