锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++开源 / C++17右值引用和move结合提升性能代码示例
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
量化预测
股票离线分析软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究。点名“简易百科”和闲暇巴盗用锐英源原创内容


C++17右值引用和move结合提升性能代码示例


最近看httplib的源代码,里面用到了右值引用&&和move,研究codeproject和MSDN后,说一些理解,帮助大家提升C++水平。

右值引用和左值引用结合理解,左值引用&是有地址变量对象的引用,变量对象出现在等号左边,而右值引用目标是文本数值和数据态集合,出现在等号右边。具体的定义,参考MSDN右值引用

右值引用可将左值和右值区分开。 为了提高应用程序的性能,它们可以消除不必要的内存分配和复制操作需求。 它们还允许编写接受任意参数的函数。 该函数可以将它们转移到另一个函数,就像直接调用了另一个函数一样。。

正因为有这些优势,httplib里把右值引用和move结合提供了性能,代码如下:

1、构造函数:

  Result(std::unique_ptr<Response> &&res, Error err,
         Headers &&request_headers = Headers{})
      : res_(std::move(res)), err_(err),
        request_headers_(std::move(request_headers)) {}

2、使用构造函数:

inline Result ClientImpl::send_(Request &&req) {
  auto res = detail::make_unique<Response>();
  auto error = Error::Success;
  auto ret = send(req, *res, error);
  return Result{ret ? std::move(res) : nullptr, error, std::move(req.headers)};
}

构造函数参数res和request_headers都是&&右值引用,对变量初始化时使用了move,而send_函数最后一句使用构造函数调用,调用语句内部也使用了move。

函数调用时使用move和构造函数内部初始化时都使用move,不冲突,右值引用支持这类操作,就像左值引用可以再被左值引用一样。

友情链接
版权所有 Copyright(c)2004-2024 锐英源软件
统一社会信用代码:91410105098562502G 豫ICP备08007559号 最佳分辨率 1440*900
地址:郑州市金水区文化路97号郑州大学北区院内南门附近