具有相同回报的多个IF

  • 本文关键字:IF 回报 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)。这不是我想问的。想象一下,如果我想返回"是"或"否",或者23423或3,而不是返回true或false。

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

如果3个测试时间较短,则return !(a||b||c);是完全合理的

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

这一切都取决于编译器如何编译代码。就所有实际目的而言,它们是相同的。(只要您确保使用短路OR"||")

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


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

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

编译器非常好,在这种情况下,无论你写什么,都会产生(几乎)相同的代码。

amp&,||和是C++中的短路运算符,这意味着只有当第一个自变量没有确定表达式的值时,才计算第二个自变量。

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

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

分离if和using||运算符不一定相同!如果a、b或c中的任何一个是用户定义的类型,并且将||或转换运算符重载为任何整数或指针类型,那么这两个构造可能会产生不同的结果!

最新更新