c++ std::函数参数绑定

k4emjkb1  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(158)

有人能解释一下为什么有些实现可以工作,而其他的不能,以及引擎盖下面发生了什么?是否有一些性能问题,例如f1?
我应该在谷歌上搜索哪些内容来查找这些Map规则?

#include<string> 
#include <algorithm>
#include <vector> 
#include <iostream>
#include <functional> 

bool f1(const std::string& str1)  //works
{
    std::cout<<"f1"<<str1<<std::endl;
    return true;
}

bool f2(std::string& str1) //not working
{
    std::cout<<"f2"<<str1<<std::endl;
    return true;
}

bool f3(std::string str1) //works
{
    std::cout<<"f3"<<str1<<std::endl;
    return true;
}

bool f4(std::string* str1)
{
    std::cout<<"f4"<<str1<<std::endl;
    return true;
}

int main(){
    std::function<bool(std::string)> fp=&f1;
    std::string x="Hello world";
    fp(x);
    return 0;
}
ilmyapht

ilmyapht1#

cppreference中所述,如果fcallable,参数类型为Args...,返回类型为R,则可以将函数f赋值给std::function<R(Args...)>
在你的例子中,f1f3是有效的,因为你可以用std::string的右值调用它们中的任何一个,而不能用std::string的右值调用f2f4

相关问题