三目运算符结合方向问题
#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)了。
有朋友可以解释一下这个么?虽然我觉得这样写的人应该开除,不过还是想知道为什么。
int z,c,a=2,b=2; z=a<b?a:a>b++?a:b; cout <<z; cout <<b;