在c/c++中,如果函数是布尔函数,您可以这样做
function1() || function2();
因此,如果function1()失败,则运行function2()。我记得还有个小把戏
function() || return false;
但是“返回假”并不返回结果。这类东西在perl等其他语言中很常见。
问题
function() || (x);
我在x中放了什么,这样我就可以得到相当于
if(function()==false)
return false;
编辑
我不会选择一个答案让选票泡汤人。不管怎样,有个解决办法:
先把这个放在某个地方
#define treturn(x) ({return (x); 1;})
现在你可以这么做了
function() || treturn(false)
或者把你想要的东西还给我。其中,只有当函数()==false时才会发生the部分。你也可以使用"&&“
function() && treturn(false)
在这种情况下,当函数()==true时会发生this。
正如许多人已经提到的那样,Note。你不该这么做。ds27680发布了一个很好的替代方案
发布于 2011-11-25 16:16:55
我想弄清楚“诡计”在哪里。在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;
既然你能说清楚,为什么要混淆呢?
发布于 2011-11-25 16:14:35
这可能不是你真正想要的答案,但我认为最好这样做:
return function();
...or,如果你觉得冗长:
if( function() )
return true;
else
return false;
玩弄语言语法的小把戏只会给你带来麻烦,或者被未来的维护程序员狠狠揍一顿。
编辑:根据这里的注释,如果要返回false
,如果函数的计算结果为false
,或者如果其计算结果为true,则继续执行,那么就没有比这样做更简单、更高效或更易于维护的方法了:
if( !function() )
return false;
/*
* MAGIC HAPPENS!
*/
EDIT2:如果您试图避免多个返回点,那么只需:
if( function() )
{
/*
* MAGIC HAPPENS!
*/
}
发布于 2011-11-25 16:13:13
万一只有false
return function()
否则
return function() || function2()
但请注意,我不确定OR语句的顺序是否已定义。
如果是,且函数()返回true,则不计算function2()。
https://stackoverflow.com/questions/8271642
复制相似问题