首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++回传技巧

c++回传技巧
EN

Stack Overflow用户
提问于 2011-11-25 16:10:13
回答 4查看 1.3K关注 0票数 1

在c/c++中,如果函数是布尔函数,您可以这样做

代码语言:javascript
运行
复制
function1() || function2();

因此,如果function1()失败,则运行function2()。我记得还有个小把戏

代码语言:javascript
运行
复制
function() || return false;

但是“返回假”并不返回结果。这类东西在perl等其他语言中很常见。

问题

代码语言:javascript
运行
复制
function() || (x);

我在x中放了什么,这样我就可以得到相当于

代码语言:javascript
运行
复制
if(function()==false)
    return false;

编辑

我不会选择一个答案让选票泡汤人。不管怎样,有个解决办法:

先把这个放在某个地方

代码语言:javascript
运行
复制
#define treturn(x) ({return (x); 1;})

现在你可以这么做了

代码语言:javascript
运行
复制
function() || treturn(false)

或者把你想要的东西还给我。其中,只有当函数()==false时才会发生the部分。你也可以使用"&&“

代码语言:javascript
运行
复制
function() && treturn(false)

在这种情况下,当函数()==true时会发生this。

正如许多人已经提到的那样,Note。你不该这么做。ds27680发布了一个很好的替代方案

EN

回答 4

Stack Overflow用户

发布于 2011-11-25 16:16:55

我想弄清楚“诡计”在哪里。在C++中,操作符||&&被定义为短路,使用它们是标准做法,例如:

代码语言:javascript
运行
复制
return p == NULL || *p == '\0';

当然:

代码语言:javascript
运行
复制
return function() || return false;

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

代码语言:javascript
运行
复制
return function() || false;

在语法上是合法的,但毫无意义;它完全等同于:

代码语言:javascript
运行
复制
return function();

最后一个例子应该写成:

代码语言:javascript
运行
复制
if ( !function() ) {
    return false;
}

。或者更有可能是与…有关的东西:

代码语言:javascript
运行
复制
bool retval = true;
if ( function() ) {
    //  ...
    retval = ...
}
return retval;

既然你能说清楚,为什么要混淆呢?

票数 4
EN

Stack Overflow用户

发布于 2011-11-25 16:14:35

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

代码语言:javascript
运行
复制
return function();

...or,如果你觉得冗长:

代码语言:javascript
运行
复制
if( function() )
  return true;
else 
  return false;

玩弄语言语法的小把戏只会给你带来麻烦,或者被未来的维护程序员狠狠揍一顿。

编辑:根据这里的注释,如果要返回false,如果函数的计算结果为false,或者如果其计算结果为true,则继续执行,那么就没有比这样做更简单、更高效或更易于维护的方法了:

代码语言:javascript
运行
复制
if( !function() )
  return false;

/*
 * MAGIC HAPPENS!
 */

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

代码语言:javascript
运行
复制
if( function() )
{ 
  /*
   * MAGIC HAPPENS!
   */
}
票数 3
EN

Stack Overflow用户

发布于 2011-11-25 16:13:13

万一只有false return function()

否则

return function() || function2()

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

如果是,且函数()返回true,则不计算function2()。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8271642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档