有人能解释一下为什么有些实现可以工作,而其他的不能,以及引擎盖下面发生了什么?是否有一些性能问题,例如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;
}
1条答案
按热度按时间ilmyapht1#
如cppreference中所述,如果
f
是callable,参数类型为Args...
,返回类型为R
,则可以将函数f
赋值给std::function<R(Args...)>
。在你的例子中,
f1
和f3
是有效的,因为你可以用std::string
的右值调用它们中的任何一个,而不能用std::string
的右值调用f2
或f4
。