gpt4 book ai didi

c++ - 如何在 C++ 中创建具有返回值的内联作用域?

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:48 24 4
gpt4 key购买 nike

我有一个更大的 if 表达式让我们说一下

if (a && (c(b.getObject()) || d(b.getObject()))
{
...
}

只有当atrue 时,是否有办法将b.getObject() 声明为本地引用?我正在寻找一种可能像这样的 lambda 函数:

if (a && { Object & o(b.getObject()); return (c(o) || d(o))} )
{
...
}

但这显然行不通。当然,我可以将它嵌套在另一个 if block 中,但是是否有更“本地”的方式来做到这一点?

编辑:
反对嵌套的 if block 的一个论据是它们不允许一个组合的 else block 。

最佳答案

定义一个执行这两项检查的函数,然后调用它,这样您就只对 b.getObject() 求值一次。

auto e = [](const Object& o) { return c(o) || d(o); };
if (a && e(b.getObject()))
{
...
}

在 C++11 之前,您必须将 e 编写为命名空间范围内的函数,或者作为具有 operator() 的局部类类型的变量.

此外,G++ 有一个非标准的 "statement expression"允许你想要的扩展,语法略有不同:

if (a && ({ const Object& o = b.getObject(); c(o) || d(o); }))
{
...
}

但是,我认为一般来说,嵌套的 if 比这两种替代方案中的任何一种都更清晰、更易于阅读。

关于c++ - 如何在 C++ 中创建具有返回值的内联作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22018036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com