首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

三目运算符结合方向有关问题

2012-11-20 
三目运算符结合方向问题#includeiostreamint main(){using std::coutusing std::endlint z,c,a2,b2

三目运算符结合方向问题
#include<iostream>
int main()
{
using std::cout;
using std::endl;
int z,c,a=2,b=2;
z=a<b?a:(a>(b++)?a:b);
  //好像是先执行左边这个三目运算符吧,要是先执行右边那个。那b就等于3了,再回到左边的a<b?a:3。z的结果就是a了.但是书上说三目运算符的结合方向是从右向左
cout<<z;
cout<<b;
  //结果z=3,b=3
return 0;
}

[解决办法]
你的代码还比较好理解,毕竟你用了括号,对于最外面而言,只有一个三目运算啊。
当然想比较a与b的大小。这个时候a==b==2,所以为false,z就等于括号里面的内容(a>(b++)?a:b)。
再看括号里面的东西,b++的意思是先返回b,然后再对b++。也就是说a>(b++)是false的(这个时候a==b==2)。那么这个表达式返回b(这个时候b==3)了。

有朋友可以解释一下这个么?虽然我觉得这样写的人应该开除,不过还是想知道为什么。

C/C++ code
int z,c,a=2,b=2; z=a<b?a:a>b++?a:b; cout <<z; cout <<b; 

热点排行