注册 登录
编程论坛 C++教室

一段代码不懂

love云彩 发布于 2013-06-23 12:11, 458 次点击
设int a=15,b=26;,则cout<<(a,b);
其输出结果是26,为什么
6 回复
#2
qunxingw2013-06-23 12:46
相当于在某个地方先后存储几个值,但只保存最后的值
但这样也不知怎么回事?
 cout<<(10,100,102)<<10,100,102,300;
   cout<<10,100,102,300<<(10,100,102);

[ 本帖最后由 qunxingw 于 2013-6-23 12:58 编辑 ]
#3
yuccn2013-06-23 12:50
没有玩过,可以试试反汇编看一下,vs自带了反汇编功能的
#4
love云彩2013-06-23 12:53
这段代码我也是上机运行之后才总结出像二楼所说的那样,不操作,根本无法理解这东西
#5
rjsp2013-06-24 10:12
逗号表达式 也不知道?连谭浩强的书上都讲过
(15,26) 这个表达式的值为26

int a=15,b=26;cout<<(a,b);
相当于
int tmp = (15,26);
cout << tmp;
#6
lzj125302013-06-24 12:01
逗号运算符,最后的结果是最后的元素,所以输出的是26
#7
yuccn2013-06-24 12:27

    int a=15,b=26;
    int c = (a,b);
反汇编结果:
    int a=15,b=26;
009517BE  mov         dword ptr [a],0Fh  
009517C5  mov         dword ptr [b],1Ah  
    int c = (a,b);
009517CC  mov         eax,dword ptr [b]  
009517CF  mov         dword ptr [c],eax



    int a=15,b=26;
    int c = (a++,b);

这两句的反汇编结果:
    int a=15,b=26;
001317BE  mov         dword ptr [a],0Fh  
001317C5  mov         dword ptr [b],1Ah  
    int c = (a++,b);
001317CC  mov         eax,dword ptr [a]  
001317CF  add         eax,1  
001317D2  mov         dword ptr [a],eax  
001317D5  mov         ecx,dword ptr [b]  
001317D8  mov         dword ptr [c],ecx

可以知道 括号里面的前面部分,被作为单独语句执行了
1