C++中有一个需要注意的操作符,这个操作符石C++中唯一的三元操作符,这个操作符就是条件操作符。


用法:

    cond ? value1 : value2;

    

简介:

    这个表达式的求解顺序是计算cond的值是否等于0,如果等于0(也就是false),那么返回value2(如果value2是一个表达式,那么计算表达式的值并返回计算结果),否则返回value1(如果value2是一个表达式,那么计算表达式的值并返回计算结果)。



使用三元操作符的时候需要注意以下几点:

    (1)避免三元操作符的深度嵌套。如下,虽然对于程序猿来说比较高大上,但是如果自己疏忽某些地方可能造成意想不到的结果,另外这样的代码可读性下降。

        int value =   i > j ? i > k ? i : k : j > k ? j : k;


    分析上边的表达式的时候我们需要遵循一个原则:三元操作符需要 ?和:作为一个整体。根据从左向右看的原则,第一个问号和倒数第二个冒号匹配.



    (2)条件表达式的优先级相对比较低,最好把这个操作符所做的操作用一个括号括起来。这样一方面避免忽略操作符的优先级造成意想不到的结果,同时使得代码可读性提高。下边列举几个primer上的例子:

cout << (i < j ? i : j);// ok: prints larger of i and j
cout << (i < j) ? i : j;// prints 1 or 0!
cout << i < j ? i : j;// error: compares cout to int

    第一个表达式没有什么问题。


    第二个表达式就有问题了,他把i和j的比较结果作为cout的操作数,输出0或者1,然后把cout的操作结果作为条件来判断三元操作符的结果。如果cout的值不等于0,那么返回三元操作符的结果是i,否则为j。