c ++返回技巧

时间:2011-11-25 16:10:14

标签: c++ return-value

在c / c ++中,如果函数是布尔值,你可以像这样做一个技巧

function1() || function2();

所以如果function1()失败,则运行function2()。我记得还有一个做法,比如

function() || return false;

但是“return false”并没有给出结果。这种东西在其他语言中很常见,比如perl。

问题

function() || (x);

我放入x的内容,以便我得到相当于

的内容
if(function()==false)
    return false;

修改

我不打算选择答案,让投票给人们起泡。无论如何,这是解决方案:

首先把它放在某个地方

#define treturn(x) ({return (x); 1;})

现在你可以这样做

function() || treturn(false)

或者回报你所喜欢的。只有当function()== false时才会发生treturn部分。你可以使用“&&”藏汉

function() && treturn(false)

在这种情况下,当function()== true时会发生变化。

注意正如很多人已经提到的那样。你不应该这样做。并且ds27680发布了一个很好的替代方案

4 个答案:

答案 0 :(得分:4)

我正在试图找出“技巧”的位置。在C ++中,运算符|| 并且&&被定义为短路,这是标准做法 例如,使用它们,例如对于像这样的事情:

return p == NULL || *p == '\0';

当然:

return function() || return false;

是非法的 - 它可能在Perl中,它是其中之一 使Perl成为一种只写语言。

return function() || false;

在法律上是合法的,但没有意义;它完全等同于:

return function();

你应该写下你的最后一个例子:

if ( !function() ) {
    return false;
}

。或者更有可能出现以下内容:

bool retval = true;
if ( function() ) {
    //  ...
    retval = ...
}
return retval;

为什么要在明确的时候进行混淆?

答案 1 :(得分:3)

这可能不是您真正想要的答案,但我认为最好这样做:

return function();

......或者,如果你感到啰嗦:

if( function() )
  return true;
else 
  return false;

使用语言语法进行一些小技巧只会让你遇到麻烦,或者被未来的维护程序员打错。

编辑:根据您的评论,如果您希望在函数评估为false时返回false,或者如果评估为true则继续执行,那么就不会有更简单,更高效的或者比以下更容易维护的方法:

if( !function() )
  return false;

/*
 * MAGIC HAPPENS!
 */

EDIT2:如果您试图避免多个返回点,那么只需:

if( function() )
{ 
  /*
   * MAGIC HAPPENS!
   */
}

答案 2 :(得分:1)

如果只是false return function()

否则

return function() || function2()

但要注意,我不确定是否定义了OR语句的顺序。

如果是,并且function()返回true,则不评估function2()。

答案 3 :(得分:1)

获得等效的最简单方法:

if(function()==false)
    return false;

将是:

return function();

: - )

现在变得严肃......并且为了解决这些问题,如果你在if之后有代码,那么你已经写了表格,大多数C ++开发人员都没有可读性问题(为了完整起见):

if(function()==false)
    return false; 

或:

   if ( !function() )
      return false; 

在我看来,其他任何事情都是不可能的或可疑的......