从维基百科,以下代码部分是等效的:
if (a > b) {
result = x;
} else {
result = y;
}
和
result = a > b ? x : y;
显然,三元的使用更为简洁,但不是很清楚。
我想知道的是:使用三元而不是传统的if语句是不好的(在代码的可读性,执行时间等方面)?
答案 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
})