C++14 通过引用返回一个值以优化性能

c++14 return a value by reference to optimize performance

本文关键字:一个 性能 优化 引用 返回 C++14      更新时间:2023-10-16

我有一个方法,最终将从内部 api 调用中获取值

auto val = api->post(req);  //step 1
// the post returns a class of "type json"
json api::post(const request& request) { //step 2
   // do some job
   json j = << some json data>>
   return j;
}

现在还有第三步,准备将 http 响应准备回外部调用方。

response server::http_response(const json &final_jsond) {
    auto response = response{final_json}; //that makes the json a string for the http payload
    response.set_header("Content-Type", "application/json");
    return response;
}

现在,这段代码可以工作了,但是我想知道我是否缺少一些现代C++原则,以避免将json对象从一个调用复制到另一个调用

上面的代码可以通过使用现代 c++ 方法来优化以变得更快吗?

也许通过引用返回?

正如其他人所建议的那样,返回应该可以像写的那样。如果server::http_response使用其参数是合理的,并且response实际上保留了json或其中的数据,那么您可以这样做

response server::http_response(json&& final_json) {
    auto response = response{std::move(final_json)}; //that makes the json a string for the http payload
    response.set_header("Content-Type", "application/json");
    return response; // You don't need std::move here.
}

当复制很昂贵时,我有时会使用这种模式。它强制调用者执行myResponse = myServer.http_response(std::move(final_json));,这对于性能来说是可取的。如果调用方想要保留其json对象,则可以改为调用myServer.http_response(json(final_json)); 。换句话说,如果http_response采用右值引用,则调用方可以通过std::move或构造未命名的临时引用来提供它。但是,复制的低效率在于调用方。

附言

您是否测量过这是性能瓶颈?

.PPS

response类型名称和变量名称是一个有问题的选择。