微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将std :: string移入捕获

如何解决将std :: string移入捕获

请考虑以下示例,该示例采用msg并以异步方式发布。

    void sendMessage(std::string msg) {
        runAsync<void>([msg = std::move(msg)] {
            onPostMessage(cookie,msg.c_str());
        });
    };

以下内容会更快吗?

void sendMessage(std::string&& msg) {

在呼叫站点上最好的选择是什么?

    auto msg = ...
    postMessage(msg);

    auto msg = ...
    postMessage(std::move(msg));

请注意,通话结束后不再需要msg

调用之后,编译器是否会自动检测到我不再使用msg并“移动”它?

解决方法

我将使用以下解决方案:

void sendMessage(std::string&& msg) {
    runAsync<void>([msg = std::move(msg)] {
        onPostMessage(cookie,msg.c_str());
    });
};

和在呼叫站点:

auto msg = ...
sendMessage(std::exchange(msg,{}));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。