
右值引用会被清空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**实现。