【C++特性】左值引用、右值引用

发布时间:2026/11/3 2:30:20
【C++特性】左值引用、右值引用 右值引用会被清空a,b都被清空#includeiostream#includevectorintmain(){std::vectorinta{1};std::vectorintb{1};std::vectorintc(std::move(a));std::vectorintd(std::move(b));}2参数构造函数3 4析构函数移动构造函数class A2参数构造函数3 4析构函数析构函数a,b都没清空#includeiostream#includevectorintmain(){std::vectorinta{1};std::vectorintb{1};std::vectorintc(a);std::vectorintd(b);}a,b,e的类型相同#includeiostream#includevectorintmain(){std::vectorinta{1};std::vectorintb{1};std::vectorinteb;std::couttypeid(a).name()std::endl;std::couttypeid(b).name()std::endl;std::couttypeid(e).name()std::endl;}运行结果class std::vectorint,class std::allocator class std::vectorint,class std::allocator class std::vectorint,class std::allocator 局部变量非引用和右值引用似乎没区别#includeiostream#includevectorclassA{public:A(constinta){std::cout执行拷贝构造函数\n;}A(constinta){std::cout执行移动构造函数\n;}};intmain(){A a1;Ab1;std::cout\n;intx2;A cx;Adx;}执行移动构造函数执行移动构造函数执行拷贝构造函数执行拷贝构造函数函数参数类型也相同#includeiostream#includevectorclassA{public:A(constinta){std::cout拷贝构造函数typeid(a).name()\n;}A(constinta){std::cout移动构造函数typeid(a).name()\n;}};intmain(){A a1;intx2;A cx;}移动构造函数int拷贝构造函数int左右值的引用都不调用构造函数初始化#includeiostream#includevectorclassA{public:A(constinta){std::coutint拷贝构造函数typeid(a).name()\n;}A(constinta){std::coutint移动构造函数typeid(a).name()\n;}A(inta,intb){std::cout2参数构造函数a b\n;}A(constAa){std::cout烤贝构造函数typeid(a).name()\n;}A(constAa){std::cout移动构造函数typeid(a).name()\n;}Aoperator(constAa){std::couttypeid(a).name()\n;return*this;}Aoperator(constAa){std::cout移动typeid(a).name()\n;return*this;}~A(){std::cout析构函数\n;}};intmain(){Aa(3,4);A ba;std::cout\n;Aca;std::cout\n;AdA(5,6);}运行结果。#include#includeclass A {public:A(const int a) {std::cout “int拷贝构造函数” typeid(a).name() “\n”;}A(const int a) {std::cout “int移动构造函数” typeid(a).name() “\n”;}A(int a,int b) {std::cout “2参数构造函数” a b “\n”;}A(const A a) {std::cout “烤贝构造函数” typeid(a).name() “\n”;}A(const A a) {std::cout “移动构造函数” typeid(a).name() “\n”;}A operator(const A a) {std::cout “” typeid(a).name() “\n”;return *this;}A operator(const A a) {std::cout “移动” typeid(a).name() “\n”;return *this;}~A() {std::cout “析构函数” “\n”;}};int main() {A a(3, 4);A b a;std::cout \n;A c a;std::cout \n;A d A(5, 6);}函数返回非引用Af(){returnA(3,4);}intmain(){A bf();std::cout \n;Adf();}2参数构造函数3 42参数构造函数3 4析构函数析构函数返回右值引用Af(){returnA(3,4);}intmain(){A bf();std::cout \n;Adf();}有问题先执行析构函数再执行拷贝构造函数。2参数构造函数3 4析构函数移动构造函数class A2参数构造函数3 4析构函数析构函数万能引用普通函数参数表示右值引用模板函数的参数,表示万能引用支持左值引用和有值引用。voidg(inta){std::coutint\n;}voidg(inta){std::coutint\n;}templateclassTvoidf(Ta){g(std::forwardT(a));}intmain(){inta;intba;intcint(2);std::cout \n;f(a);f(b);f(c);f(int());}运行结果。如下修改后templateclassTvoidf(Ta){g(a);}intintintint扩展阅读计算几何为骨排样优化为魂作品一亲士套料工具箱 作品二 亲士CAD工具箱经典文章推荐二维排样万物皆数学查阅鄙人的博文请点击博文下载学院导航活到老学到老。明朝中后期大约50%的进士能当上堂官(副部及更高)能当上堂官的举人只有十余人。子墨子言之事无终始无务多业。也就是我们常说的专业的人做专业的事。测试环境操作系统win7 开发环境 VS2019C17或者 操作系统win10 开发环境 VS2022C17如无特殊说明本算法用**C**实现。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询