Sign-up....

cout的奇怪问题

今天在调试一个问题的时候发现一个奇怪的问题。

一下两段程序输出结果竟然不一致,不知道VC.net为什么要这样编译,高手来看看啊。

int main()

{

int* p = new int[3];

p[0] = 1;

p[1] = 2;

p[2] = 3;

cout<< *p<<*(++p)<<*(++p)<<endl;//全部输出3,VC6和C++Builder下为332,难道这样是不对的写法??

}

而这样分开写输出结果便正确了,为什么啊高手解答一下。

cout<< *p;

cout<<*(++p);

cout<<*(++p)<<endl;

自己打开汇编看了看也觉的很困惑

[293 byte] By [msdn] at [2007-8-14 22:53:55]
# 1 Re: cout的奇怪问题

这个和编译有关系吧,最好不要这样写,你这个从右向左运算

foochow at 2005-6-29 23:05:43 >
# 2 Re: cout的奇怪问题

int main()

{

int* p = new int[3];

p[0] = 1;

p[1] = 2;

p[2] = 3;

cout<< *p<<*(++p)<<*(++p)<<endl;//我觉得输出为332是可以理解的,编译器的输出运算顺序是从左到右进行的,即先输出*(++p)输出2,要输出*(++p)输出3,最后输出3.

所以输出332

}

llf_hust at 2005-6-29 23:06:31 >
# 3 Re: cout的奇怪问题

输出就应该是332^_^不过,最好不要这样写

foochow at 2005-6-29 23:06:50 >
# 4 Re: cout的奇怪问题

但是为什么在VC.net下输出了333,难道没有统一标准?

打开汇编看到VC.net的编译器竟然先将其全部做了运算再进行输出,晕这样的话有什么意义?

shuihan84 at 2005-6-29 23:39:06 >
# 5 Re: cout的奇怪问题

打开汇编看看不就结了?

反正我不会写类似的代码的

277894613 at 2005-6-30 0:03:03 >
# 6 Re: cout的奇怪问题

这种连写++\--与编译器有关

xlsue at 2005-6-30 7:03:37 >
# 7 Re: cout的奇怪问题

与编译器的压栈顺序有关!

cout<< *p<<*(++p)<<*(++p)<<endl;//这样的话当成一个,就好象printf(......);

而cout<< *p;

cout<<*(++p);

cout<<*(++p)<<endl;

向当于

printf(...);

printf(...);

........

当然结果不一样了

xjp6688 at 2005-6-30 8:48:18 >
# 8 Re: cout的奇怪问题

还是不要这样写好了

qfeng_zhao at 2005-6-30 9:00:15 >

C/C++

All Classified