【发布时间】:2019-07-23 07:01:00
【问题描述】:
我有一个最终会从内部 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++的方法优化,变得更快?
可能通过引用返回?
【问题讨论】:
-
三个主要编译器都擅长 RVO(返回值优化),例如复制省略。您也可以使用“移动”构造函数和
std::move来避免复制。 -
@nivpeled 对局部变量的引用?那是个坏主意。
-
@nivpeled 因为那会产生问题。
-
顺便说一句,在很久以前 modern C++ 出现之前,通过引用返回就已经存在了。它与现代的东西无关。
-
除非 sizeof(...) 很大,否则只需确保您有一个移动构造函数并按值返回。你不需要 std::move here
标签: c++ performance c++14 copy-elision return-value-optimization