我见过一些看起来像这样的代码:
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。答案 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中的任何一个是用户定义的类型并且超载||或转换运算符到任何整数或指针类型,那么这两个结构可能会产生不同的结果!