【问题标题】:are multiple statements inside an if the same as multiple ifs?if 中的多个语句是否与多个 if 相同?
【发布时间】:2020-10-25 09:43:58
【问题描述】:

if(a == 0 && b == 0 && c == 0) { return; }

if(a == 0) { return; }

if(b == 0) { return; }

if(c == 0) { return; }

if(a == 0) { return; }

else if(b == 0) { return; }

else if(c == 0) { return; }

我想编写快速代码,并且对这些语句通常解释为汇编指令的不同之处感兴趣。

【问题讨论】:

  • 第二个和第三个是等价的,相当于if(a == 0 || b == 0 || c == 0) { return; }。如果三个中的任何一个为零,则它们返回,而当三个都为零时,第一个返回。
  • 你在进行微优化,不要那样做。专注于编写好的、干净、可读和可维护的代码。首先也是最重要的。然后,如果程序不能满足您的要求,您可以测量、基准测试和配置文件以找到前两个(或可能三个)瓶颈,并努力优化它们(使用 大量 文档和 cmets)。我怀疑即使是前十名也不会出现这种情况。
  • 哦,在进行基准测试和测量时,始终启用优化。
  • @orORorOR -- 如前所述,如果您的程序使用低效的算法、循环等,查看小的 if 语句对程序速度没有任何帮助。如果您有一个三重嵌套的 for 循环在某个地方,循环一百万次,当您可以使用不同的数据结构时,对项目进行预排序等等,从而减少时间,这比尝试优化 if 语句更值得。

标签: c++ c performance


【解决方案1】:
if(a == 0 && b == 0 && c == 0) { return; }

这相当于:

if(a == 0)
  if(b == 0)
    if(c == 0)
      return;

而这两个:

//1
if(a == 0) { return; }
if(b == 0) { return; }
if(c == 0) { return; }
//2
if(a == 0) { return; }
else if(b == 0) { return; }
else if(c == 0) { return; }

等价于 if( a==0 || b == 0 || c == 0){ return; }.

【讨论】:

  • if(a == 0 && b == 0 && c == 0) { return; } 相当于 if(a == 0) if(b == 0) if(c == 0) return 0;??一个是 void 函数,另一个是返回 int???
【解决方案2】:

如上所述

if(a == 0 && b == 0 && c == 0) { return; }

一样
if(a == 0) 
 if(b == 0) 
  if(c == 0) 
    return;

if(a == 0) { return; }

else if(b == 0) { return; }

else if(c == 0) { return; }

等于

if(a == 0 || b == 0 || c == 0) { return; }

但仅在此示例中,因为我们在每个 if 状态中都返回 0。

【讨论】:

  • return 0 和 return 不一样
  • 感谢@armagedescu,我的错误,发帖前没有仔细检查
猜你喜欢
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
相关资源
最近更新 更多