你如何"打破"一个功能?

Bra*_*don 8 c++

给定一个返回值的函数,是否可以在给定某个条件的情况下退出函数而不返回任何内容?如果是这样,你怎么能做到这一点?

例:

int getNumber ()
{ 
    . . . 
}
Run Code Online (Sandbox Code Playgroud)

所以说你在这个功能.有没有办法退出它而不做任何事情?

Maw*_*awg 16

可能会失去一个return;没有回报价值的东西.编译器会发出警告,但可能没有错误.

但是,为什么你甚至会考虑这个呢?你想要实现什么目标?

调用代码是什么样的?如果是,int someVar = getNumber();那么someVar的值是未定义的(这是一个坏事).

听起来我想要返回两条信息,其中一条告诉你另一条信息是否有效.

尝试类似的东西

bool GetNumber(int * outputNumber)
{
   if ....
   {
      *outputNumber = ...;
      return true;
   }  
   else
   {
      return false; // contents of outputNumber are undefined
   }
}

int number;
bool isNumberValid;
isNumberValid = GetNumber(&number);
if (isNumberValid)
    ... do something with number
Run Code Online (Sandbox Code Playgroud)

  • 标准从不需要错误,仅仅是"诊断".因此,它平等地对待警告和ewrors.但是不要让那个骗过你:省略返回值_is_是一个错误. (3认同)

rer*_*run 15

你有两个选择:return某事或throw.

int getNumber() 
{
    return 3;
}

int getNumber() 
{
    throw string("Some Var");
}
Run Code Online (Sandbox Code Playgroud)

如果你throw,你必须catch输入你输入的类型.

int maint(int argc, char ** argc)
{
     try
     {
           getNumber();
     }
     catch(string std)
     {
          //Your code will execute here if you throw
     }
 }
Run Code Online (Sandbox Code Playgroud)

  • 如果返回没有值是错误,则仅使用throw替代方法.很难分析使用抛出普通代码流异常的代码. (12认同)
  • 在"昂贵"部分(取决于运行时)不是真的,但是,例外是*异常*(和错误)条件,而不是替代控制流. (2认同)
  • @DevSolar:在非特殊情况下,它们在运行时间方面并不昂贵,但在代码大小方面它们很昂贵. (2认同)

MSa*_*ers 8

简单方案:

boost::optional<int> getNumber( )
{
  // May now return an int, or may return nothing.
}
Run Code Online (Sandbox Code Playgroud)