在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发布了一个很好的替代方案
答案 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;
在我看来,其他任何事情都是不可能的或可疑的......