给大家出道题 放松一下。

zlcs8921 2008-10-28 01:36:46
1

short i=0;
cout<<"== "<<(3+5+i)<<(i=5)<<(i=4)<<endl;


2

int j=0;
cout<<"== "<<(3+5+j)<<(j=5)<<(j=4)<<endl;



c++, 别去试,告诉我结果。

答对者给分。
...全文
418 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
zixinyin 2008-10-29
  • 打赏
  • 举报
回复
无聊啊~ 有讨论的意义么 括号是什么用的?
leank 2008-10-29
  • 打赏
  • 举报
回复
先运算,后打印。
[Quote=引用 20 楼 zjfhgdx 的回复:]
1355是怎么出来的?不解啊,高人指点下!
[/Quote]
zlcs8921 2008-10-29
  • 打赏
  • 举报
回复
你懂什么,人家编译器作出来,目的就是为了和别的编译器不兼容。垄断。
zlcs8921 2008-10-29
  • 打赏
  • 举报
回复
请教一下,什么是序列点?
zlcs8921 2008-10-29
  • 打赏
  • 举报
回复
请教一下,什么是序列点?

[Quote=引用 38 楼 once_and_again 的回复:]
序列点...
[/Quote]
jieao111 2008-10-28
  • 打赏
  • 举报
回复
如果所有的版本都给出相同的结果,我们还可暂称之为“事实标准”
如果几个主流编译器给的结果不同,我们就称这段代码为“垃圾”


up
yao6586107 2008-10-28
  • 打赏
  • 举报
回复
cout<<"== "<<(3+5+i) <<endl;
输出值却又是8,为什么?
yao6586107 2008-10-28
  • 打赏
  • 举报
回复
在vc 6.0上1354,在其他上又是别的值,
这是什么原因?不解?
编码器难道没标准吗?
sockerly 2008-10-28
  • 打赏
  • 举报
回复
这个和编译器有关系的,答案是不确定的
lq651659889 2008-10-28
  • 打赏
  • 举报
回复
终于看懂了啊
kingofice 2008-10-28
  • 打赏
  • 举报
回复
和编译器有关,未定义的东西,研究这些东西有些钻牛角尖了
工作代码里面谁敢这样写,服了他!
cba_v 2008-10-28
  • 打赏
  • 举报
回复
cout什么时候压栈 cout 怎么也压栈啊?
它不是直接在con上显示吗?
压栈不是 函数调用时要压栈的吗 不知道 cout怎么也压栈
还请讲解一下 谢谢了
yangqiang71 2008-10-28
  • 打赏
  • 举报
回复
学习.....
坐看昀起 2008-10-28
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
void main()
{
short i=0;
cout<<"== "<<(3+5+i)<<(i=5)<<(i=4)<<endl;
int j=0;
cout<<"== "<<(3+5+j)<<(j=5)<<(j=4)<<endl;
}

运行结果:
== 1355
== 1355
once_and_again 2008-10-28
  • 打赏
  • 举报
回复
序列点...
lq651659889 2008-10-28
  • 打赏
  • 举报
回复
1354但不知道为什么
DarknessTM 2008-10-28
  • 打赏
  • 举报
回复
编译器可自定的部分,无标准答案……
elephont9527 2008-10-28
  • 打赏
  • 举报
回复
考虑ostream& operator << (const T&),那么连续的<<会导致函数压栈,i=4先入栈,此时i为4,然后i=5入栈,此时i为5
然后才是3+5+i入栈
因为i为5,所以结果13 5 5

而854的原因应该是,优化了连续<<的处理,不压栈,而是串行处理

结论,编译器搞得鬼
小猴饲养员 2008-10-28
  • 打赏
  • 举报
回复
正用的机器上只有vs2008。结果是 == 1355
看了前面的评论,结果可能和编译器相关的。回去在vs2005和vc6.0上试试
zlcs8921 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 wangchaoxjtuse 的回复:]
== 1354,
分析如下:
(1)首先,cout中“ < <”的运算顺序是右向左;
首先计算的是:cout < <"== " < <(3+5+i) < <(i=5) < <(i=4) < <endl;
结果是:cout < <"== " < <(3+5+i) < <(i=5) < <4 < <endl;由于没有遇到cout,所以4先压栈;
其次计算的是:cout < <"== " < <(3+5+i) < <(i=5) < <(i=4) < <endl;
结果是:cout < <"== " < <(3+5+i) < <5 < <4 < <endl;由于没有遇到cout,所以…
[/Quote]



1 为什么没有遇到cout,先压栈呢?cout也在栈中阿。
2 压栈是压4么?应该压左值。
加载更多回复(32)

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧