c++ - 将std::string移入捕获

标签 c++ c++11 c++14

考虑下面的示例,该示例采用msg并异步发布它。

    void sendMessage(std::string msg) {
        runAsync<void>([msg = std::move(msg)] {
            onPostMessage(cookie, msg.c_str());
        });
    };
以下内容会更快吗?
void sendMessage(std::string&& msg) {
在 call 站点上最好的选择是什么?
    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, {}));

关于c++ - 将std::string移入捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63807171/

相关文章:

c++ - 根据模板类型生成 lambda 主体(调用可调用对象并返回)

c++ - 为什么 std::pair<A,B> 与 std::tuple<A,B> 不同? (真的没有办法吗?)

c++ - 当字符串下标超出范围时,不抛出异常

c++ - Visual Studio 2010 : chrono header file missing

c++ - std::make_unique<T[]>(size) 值初始化

c++ - 我可以根据其 operator() 的签名专门化可变参数模板参数吗

c++ - constexpr 函数可以返回局部对象的指针吗?

c++ - 重载后缀增量运算符

c++ - 制作逗号分隔字符串时如何处理最后一个逗号?

c++ - 如何从采用容器常量引用的函数返回非常量迭代器