std::bind参数中隐式类型转换的问题

博客聚焦于std::bind参数中隐式类型转换的问题,虽未给出具体内容,但可知核心围绕此信息技术领域的关键问题展开探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "ConnectHelper.h"
#include "ConnectCmd.h"

class mystr
{
public:
    mystr()
    {
        LOG_INFO("create str");
        _str = "";
    }

    mystr(const char * str)
    {
        LOG_INFO("create str %p", str);

        size_t len = strlen(str);
        _str = new char(len);
        strcpy(_str, str);
    }

    mystr(const mystr & str)
    {
        LOG_INFO("create str");
        size_t len = strlen(str._str);
        _str = new char(len);
        strcpy(_str, str._str);
    }

    mystr & operator = (const mystr & str)
    {
        LOG_INFO("create str");
        size_t len = strlen(str._str);
        _str = new char(len);
        strcpy(_str, str._str);
        return *this;
    }

    ~mystr()
    {
        LOG_INFO("destroy str");
    }

    const char * c_str() const
    {
        return _str;
    }
private:
    char * _str;
};

void uppercasify(const mystr & str)
{
    LOG_INFO("%p:%s", str.c_str(), str.c_str());
}

int main()
{
    EventLoop baseLoop;
    EventLoopThreadPool poolLoop(&baseLoop);
    poolLoop.start(1);

    {
        char * str = (char *)malloc(100);
        strcpy(str, "aaaBb");

        LOG_INFO("main loop %p:%s", str, str);
        //poolLoop.getNextLoop()->runInLoop(std::bind(uppercasify, mystr(str)));
        poolLoop.getNextLoop()->runInLoop(std::bind(uppercasify, str));
        str[1] = 'b';
    }


    baseLoop.loop();
	return 0;
}

 输出结果:

 

std::bind函数可以将可调用对象和其参数进行绑定,并返回一个绑定后的函数对象。绑定的结果可以使用std::function保存。它可以用于绑定普通函数、成员函数以及函数对象,并且可以通过占位符来指定参数的位置。 当绑定普通函数时,std::bind的第一个参数函数名,普通函数做实参时会隐式转换函数指针。例如,std::bind(my_divide,_1,2)等价于std::bind(&my_divide,_1,2),其中_1表示占位符,位于std::placeholders中。调用绑定后的函数对象时,传入的参数将替换占位符的位置,实现参数的绑定。 而当绑定成员函数时,std::bind的第一个参数是成员函数的地址,后续参数是成员函数调用时需要传入的参数。通过占位符来指定参数的位置。调用绑定后的函数对象时,传入的参数将替换占位符的位置,实现参数的绑定。 总结而言,std::bind函数可以将可调用对象和其参数进行绑定,以创建一个新的函数对象。这个新的函数对象可以方便地进行参数的绑定,减少传入参数的个数,使得代码更加灵活和易读。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++11 std::bind](https://blog.csdn.net/mayue_web/article/details/87915389)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [C++11中的std::bind 简单易懂](https://blog.csdn.net/Jxianxu/article/details/107382049)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值