三目运算符由两大部分组成,“?”前面的是判断条件,如果前面的运算结果是1,即前面的条件成立,执行“:”前面,“?”后面的执行结果,反之则执行“:”后面的表达式。
c=a>b?a:b;
让我们看一下这行代码,首先最外面的括号是为了输出最后的结果,如果a>b,前面的表达是为真执行c=a,如果a<b,前面的表达式为假,执行c=b;
这只是一个简单的使用方法,现在让我们思考一下,这个题目,四个数如何用三元运算符求最大值。
cout << (a > b ? (a > c ? (a > d ? a : d) : (c > d ? a : d)) : (b > c ? (b > d ? b : d) : (c > d ? c : d)));
让我们看一下这行代码,首先最外面的括号是为了输出最后的结果没有它,那么输出的结果只会是0或者1,这显然不是我们想要的结果,其中的原理是首先分为三个部分,第一个部分a > b ?,
第二个部分 (a > c ? (a > d ? a : d) : (c > d ? a : d)) :,第三个部分(b > c ? (b > d ? b : d) : (c > d ? c : d)),这是最外面的条件和结果,我们还需要拆分,
第二个部分又能分为a > c ?,(a > d ? a : d),和: (c > d ? a : d),第三部分类似,这个时候几乎就是最简单的形式了,之所以用那们多括号是为了能看到更明白和写的时候更加清晰,
除了最外面的括号当然都可以省略,相信诸位都能看懂了,只要掌握了这个几乎问题都不大了。