具有相同回报的多个IF

时间:2011-06-28 08:49:08

标签: c++ if-statement

我见过一些看起来像这样的代码:

if (a) return false;
if (b) return false;
if (c) return false;
return true;

上述和

之间的表现是否有任何差异
if (a || b || c) return false;
else return true;

一般情况下,处理此问题的首选案例是什么?也许在我的第二个例子中没有其他的东西?

编辑:似乎很多人因为我返回真或假并建议返回而被误导!(a || b || c)。这不是我想问的问题。想象一下,如果不是返回true或false,我想返回“Yes”或“No”,或23423或3。

5 个答案:

答案 0 :(得分:5)

任何一个的唯一优点是可读性,优化编译器为这两种情况生成几乎相同的代码是合理的。

如果3次测试很短,那么return !(a||b||c);是完全合理的

如果它们是长函数调用,那么第一个示例将更容易阅读。

答案 1 :(得分:4)

这一切都归结为编译器如何编译代码。出于所有实际目的,它们是相同的。 (只要你确保使用短路OR“||”)

答案 2 :(得分:1)

简而言之:代码中没有显着差异,您可以进一步通过将代码编写为return !(a || b || c);来缩短代码


如果您的条件非常简单,例如if (fata_is_invalid || login_failed),那么您可以像建议的那样将它们全部合并为一行。

有时您会看到条件非常庞大,在这种情况下,最好将它们分成更小的块(通过多个if语句或重新格式化代码)。无论哪种方式,它只是一个可读性的东西 - 使用你喜欢的任何方法(或者你的“风格指南”提倡的任何方法)。

编译器是超级甜蜜的,并且会为那些你写的东西生成(几乎)相同的代码。

答案 3 :(得分:0)

&&,||和?是C ++中的short-circuit运算符,这意味着仅当第一个参数未确定表达式的值时才会计算第二个参数。

这意味着您可以简单地为您的示例代码编写:

return !(a || b || c);

答案 4 :(得分:0)

分隔ifs并使用||操作员不一定完全相同!如果a,b或c中的任何一个是用户定义的类型并且超载||或转换运算符到任何整数或指针类型,那么这两个结构可能会产生不同的结果!