是否建议使用三元运算符?

时间:2014-03-19 01:48:03

标签: c++

在C中,我们可以使用三元组

( a == 4) ? a = b: a = 5;

有人告诉我最好不要使用它,你觉得怎么样?

4 个答案:

答案 0 :(得分:6)

条件运算符对于形成表达式非常有用。当你需要一个依赖于条件的表达式时使用它。不要用它来制作语句。例如,您的代码可以是一个声明:

if (a == 4) { a = b; }
else        { a = 5; }

或者您可以使用条件表达式编写它,但是惯用法是这样的:

a = (a == 4 ? b : 5);

答案 1 :(得分:3)

其实你应该写

a = (a == 4) ? b : 5;

关于三元操作的讨论对我来说似乎总是很无聊 - 可以找到一些好的见解here(TL; DR OP的例子:

return (a<b) ? (b<c) ? b : (a<c) ? c : a : (a<c) ? a : (b<c) ? c : b;

可能是这样一种情况,使用三元操作并不是一个好主意,如果你问我,就像你的那样有助于提高可读性。

答案 2 :(得分:1)

这是使用三元运算符的一种不好的方法(有更糟糕的方法,但那个方法很糟糕)。你应该使用:

a = (a == 4) ? b : 5;

不同之处在于,这显然是对a的赋值,而三元运算符决定了要赋值的值。在您的版本中,您必须查看三元运算符的内部,以确定它在两个分支中分配给a。 (使用三元运算符的一种更糟糕的方法是(a == 4) ? a = b : b = 5;分配两个不同的变量。)

如果您觉得需要编写嵌套的三元运算符,那么您也可能不恰当地使用它。偶尔会好的,但不是很常见。

答案 3 :(得分:0)

?:运算符可用作if ... else语句的快捷方式。它通常用作较大表达式的一部分,其中if ... else语句会很笨拙。

例如:

time_t t = time(0);
now = localtime( & t );
greeting = "Good" + ((now->tm_hour > 17) ? " evening." : " day.");

复制自:http://msdn.microsoft.com/en-us/library/be21c7hw%28v=vs.94%29.aspx