当前位置: 首页 > news >正文

【DeepSeek学C++】移动构造函数

string str;
   string&& r = std::move(str);
   string s{r};

s初始化时会触发移动构造?
户想知道,在初始化s的时候,是否会调用移动构造函数。我需要先理清楚每个步骤发生了什么。

首先,str是一个普通的string对象,然后通过std::move(str)将其转换为右值引用,赋值给r。这里r的类型是string&&,也就是一个右值引用。但需要注意的是,虽然r是右值引用类型,但它本身是一个左值,因为它有名字。也就是说,当使用r的时候,它实际上是一个左值,尽管它的类型是右值引用。

接下来,用r来初始化s。这里s的构造方式是string s{r};。这时候,编译器会如何选择构造函数呢?根据C++的标准,当用一个左值来初始化对象时,如果该左值的类型是右值引用,那么它会被视为左值,所以这里会调用拷贝构造函数,而不是移动构造函数。因为移动构造函数需要的是右值,而r在这里作为左值存在。
为了验证这一点,我可以考虑强制将r转换为右值,比如使用std::move®,这时候就会调用移动构造函数。例如:

string s{std::move®};

相关文章:

  • html5-qrcode前端打开摄像头扫描二维码功能
  • 【嵌入式学习】时钟 - 边缘触发锁存器
  • C# 零基础入门篇(19.DateTime 使用指南)
  • 【动态规划篇】91. 解码方法
  • Arduino示例代码讲解:Pitch follower 跟随
  • 舞狮表演(dp)
  • 基于32单片机的无人机直流电机闭环调速系统设计
  • xpath轴
  • git 子模块的使用
  • EMQX安装与配置
  • java项目之基于ssm的疫苗预约系统(源码+文档)
  • 基于分类算法的学习失败预警(上)
  • 力扣热题100(方便自己复习,自用)
  • 利用ffmpeg库实现音频Opus编解码
  • 车载以太网网络测试-18【传输层-DOIP协议-1】
  • PyTorch模型转ONNX例子
  • 深入探究 JVM 堆的垃圾回收机制(一)— 判活
  • python3 -m http.sever 8080加载不了解决办法
  • 6个常见的Python设计模式及应用场景
  • Python实战:开发经典猜拳游戏(石头剪刀布)
  • 125%→10%、24%税率暂停90天,对美关税开始调整
  • 甘肃:今年6月前,由县级党委、政府制定农村彩礼倡导性标准
  • 阶跃星辰CEO姜大昕:追求智能上限仍是最重要的事,多模态的“GPT-4时刻”尚未到来
  • 冷冰川谈黑白
  • 同济大学原常务副校长、著名隧道及地下工程专家李永盛逝世
  • 重庆荣昌区委区政府再设“答谢宴”,邀请800余名志愿者机关食堂用餐