摘要:本文主要向大家介绍了 C/C++知识点之C++ stl库bind函数模板用法的注意事项,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了 C/C++知识点之C++ stl库bind函数模板用法的注意事项,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
bind可以包装类成员函数,创建函数对象。其中有接收类类型和类指针类型的版本,如:
#include <iostream>
#include <memory>
#include <functional>
using namespace std;
struct TesSt {
TesSt()
{}
void update(const string &in_str) {
str = in_str;
cout << "str:" << str << endl;;
}
string str;
};
TesSt g_test_st;
int main () {
auto func1 = bind(&TesSt::update, &g_test_st, "hihi");
auto func2 = bind(TesSt::update, &g_test_st, "hihi");
auto func3 = bind(&TesSt::update, g_test_st, "hihi");
auto func4 = bind(TesSt::update, g_test_st, "hihi");
return 0;
}
如果不做任何处理的话,bind函数是通过值拷贝的方式进行参数传递。也就是说,func1、func2是经过被拷贝的类指针构造,调用会更新g_test_st内容;func3、func4是值拷贝构造,调用时更新的是g_test_st的副本,不会影响原来的类变量。
另外,可以通过std::ref,使bind进行引用传递参数,如:
auto func3 = bind(&TesSt::update, std::ref(g_test_st), "hihi");
这样func3调用时更新的是g_test_st的引用内容,并不是副本。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号