使用三元if

时间:2014-01-10 12:22:03

标签: c if-statement ternary-operator

从维基百科,以下代码部分是等效的:

if (a > b) {
    result = x;
} else {
    result = y;
}

result = a > b ? x : y;

显然,三元的使用更为简洁,但不是很清楚。

我想知道的是:使用三元而不是传统的if语句是不好的(在代码的可读性,执行时间等方面)?

1 个答案:

答案 0 :(得分:3)

一切都取决于。我只能想到一个情况,其中三元运算符无可否认提高了可读性甚至性能(参见本答案的底部)。但一般来说,使用三元组不会提高代码的可读性/可维护性。如果偶尔使用它,并且仅用于简单的分配,那么它就可以了。不是,只是可以接受的IMO。当然,其他人可以自由地对此表示不满。

三元是表达式,因此它们应该只用作(例如,赋值的一部分)。如果你开始使用三元作为陈述,那么你就麻烦了。三元不是语句,使用它们就像用勺子作为螺丝刀一样。愚蠢的。

总的来说,只要你不过分,它就是品味问题。一旦你开始嵌套三元组,使用它们指针指针,或作为语句,这是一个疯狂的问题。
但说实话:有疑问时:不要使用三元运算符。它为您节省了1行代码,但并未提高性能。举个例子:

if (a > b) result = x;
else result = y;
//vs:
result = a > b ? x : y;

如果result是函数的返回值,您甚至可以写:

if (a > b) return x;
return y;

即使我现在有2个return语句,我仍然觉得这个代码比:

更容易阅读
result = a > b ? x : y;
//or
return a > b ? x : y;

一个三元是最佳选择的用例是:

const int two_options = some_arg ? 23 : 1;

这使您可以根据条件定义+初始化函数范围内的const,而无需额外函数调用的开销(const int two_opts = arg_func(some_arg);,其中函数包含if-else })