如果声明,则返回vs什么也不做

时间:2017-06-22 19:52:09

标签: c++

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

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

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

2 个答案:

答案 0 :(得分:3)

这取决于编译器对汇编指令的精确转换,但它很可能完全相同和/或可忽略不计,无关紧要。

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

答案 1 :(得分:0)

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

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
}