c++14 return 通过引用优化性能的值

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

我有一个最终会从内部 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++方法优化以上代码,使其变得更快?

也许通过引用返回?

正如其他人所建议的那样,return 应该与写的一样。如果 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::moveing 或构造一个未命名的临时对象来提供它。但是这样复制的低效就在调用者身上了。

PS

您认为这是性能瓶颈吗?

PPS

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