首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么与适配器兼容的函数对象不能作为引用传递参数?

为什么与适配器兼容的函数对象不能作为引用传递参数?
EN

Stack Overflow用户
提问于 2021-05-17 05:50:01
回答 1查看 35关注 0票数 0

我想创建一个函数对象,将参数作为引用,而不是值。如果我使用不带std::not1的function-object,它可以工作。但是,使用std::not1时,除非参数接受参数作为值,否则根本不会编译。

下面的代码来自cppreference not1,我更改了LessThan7,将参数i作为引用,而不是值:

代码语言:javascript
复制
struct LessThan7 : std::unary_function<int, bool>
{
    bool operator()(int &i) const { return i < 7; }
};

int main()
{
    std::vector<int> v(10);
    std::iota(begin(v), end(v), 0);

    std::cout << std::count_if(begin(v), end(v), std::not1(LessThan7())) << "\n";

    std::function<bool(int)> less_than_9 = [](int x){ return x < 9; };
    std::cout << std::count_if(begin(v), end(v), std::not1(less_than_9)) << "\n";
}

为什么这段代码不能工作?

代码语言:javascript
复制
error: no matching function for call to object of type 'const LessThan7'
        {return !__pred_(__x);}
                 ^~~~~~~
EN

回答 1

Stack Overflow用户

发布于 2021-05-17 05:59:15

传递给count_if的谓词不得修改其参数。不允许使用int &类型的参数。您应该使用const引用来获取参数:

代码语言:javascript
复制
struct LessThan7 : std::unary_function<int, bool>
{
    bool operator()(const int &i) const { return i < 7; }
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67561847

复制
相关文章

相似问题

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