【问题标题】:return vs do nothing after if statement [duplicate]在if语句之后返回vs什么都不做[重复]
【发布时间】:2017-06-22 19:52:09
【问题描述】:

这两个函数在代码执行方面有什么区别。结果是一样的,但是编译器会优化到同一个输出的程序集吗?

void some_func() 
{
   if (!something)
      return;
   //rest of code
}

void other_func() 
{
   if (something) {
      //rest of code
   }
}

【问题讨论】:

  • 为什么不直接检查编译器输出?
  • 没有区别。编译器是否会同样优化它们取决于编译器。
  • 但即使没有,差异也可以忽略不计。
  • 我在检查前置条件(或抛出异常)时使用 case(1)。它使(前置条件的)测试结束和实际代码开始的位置变得很明显。

标签: c++


【解决方案1】:

汇编指令的精确翻译取决于编译器,但很可能完全相同和/或可以忽略不计。

这通常用于提高任何速度优化尝试的可读性。

【讨论】:

    【解决方案2】:

    首选前者。它更简单,更易读。

    void foo()
    {
        if( error_condition)
        {
           // Handle error
           return;
        }
    
        // Carry on
    
        if( other_error_condition)
        {
           // Handle error
           return;
        }
    
        // Carry on
    
        // Done
    }
    

    有些人认为任何函数都应该只有一个返回值,但这在很长一段时间内都不是最佳实践,而且是汇编时代遗留下来的神话。

    替代方案导致很多嵌套的丑陋

    void foo()
    {
        if( !error_condition)
        {
           // Do stuff
    
           if ( !other_error_condition )
           {
               // Do other stuff
           }
           else           
           {
                // Handle error
           }
        }
        else
        {
            // Handle error
        } 
    
        // Done
    }
    

    【讨论】:

    • “最佳实践”永远不可能是“真”或“假”,它只是不再是最佳实践。
    猜你喜欢
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2023-03-14
    • 1970-01-01
    • 2019-04-11
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多