如何解决lambda表达式中的“并非所有控制路径都返回值”

时间:2019-09-12 21:12:33

标签: c++

我有一些带有lambda表达式的代码,我的问题是,仅当“ if”不是nullptr时,我才想返回一些内容。其他方式我不想返回任何东西。可以在此代码中使用退货吗?还是另一种不发出警告的方式?

-

效果很好,但是这个警告很烦人,我知道我应该为此做些事情。

1 个答案:

答案 0 :(得分:3)

std::stable_partition的意图是:

  

重新排列范围[first,last)中的元素,以使谓词p返回true的所有元素都在谓词p返回false的元素之前。保留元素的相对顺序。

使用时

return !x->object2->parameter_;

您想将!x->object2->parameter_为真的所有元素放在左边,并将!x->object2->parameter_为false的所有元素放在右边。

以此判断,如果x->object2_nullptr,则应该将它们放在右边。因此,默认return必须为

return false;

因此

auto iter = std::stable_partition(object1->vector_.begin(),
                                  object1->vector_.end(),
                                  [](Class* x) -> bool
{
    if (x->object2_ != nullptr)
    {
        return !x->object2->parameter_;
    }

    return false;
});

您可以将函数的主体合并为一行,如下所示:

auto iter = std::stable_partition(object1->vector_.begin(),
                                  object1->vector_.end(),
                                  [](Class* x) -> bool
{
    return (x->object2_ != nullptr) && (!x->object2->parameter_);
});