C++14 通过引用返回一个值以优化性能
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++ 方法来优化以变得更快吗?
也许通过引用返回?
正如其他人所建议的那样,返回应该可以像写的那样。如果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
类型名称和变量名称是一个有问题的选择。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 静态常量与常量局部变量,哪一个性能更好
- C++14 通过引用返回一个值以优化性能
- 虚拟继承的性能开销(如果只有一个基具有数据成员)
- MongoC ++驱动程序BSON构造:基于流与基于字符串解析.哪一个性能更好?
- C++将 2D 阵列的一部分复制到另一个 2D 阵列,性能
- 几对性能问题(一个较大的向量与较小的块向量),值得存储迭代索引以进行矢量访问
- 在OpenGL中为顶点、uvs和法线使用一个缓冲区是否比使用三个缓冲区性能更好
- 哪一个性能更好:使用函数或精确代码
- 将所有双精度转换为整数以获得更好的性能,这只是一个谣言
- 将两个C++类封装到一个具有性能注意事项的高级类中
- 将一个循环分解为两个循环的性能
- C++std用一个常数值列出初始化,它是否会改变性能
- 从另一个操作符重载函数调用操作符重载函数:性能
- 与这些代码的性能有关?一个非常快,另一个超过了时间限制
- 一个很好的性能替代PHP-字符串/文件操作