企业建网站的意义,建个网站需要多少钱费用,c2c模式发展趋势,wordpress 注册邀请码在这里只能给出 s t d : : m o v e std::move std::move一个比较通俗的看法#xff0c;不能从原理上深挖#xff0c;真是惭愧。不过这里面涉及到一些小 t r i c k trick trick#xff0c;还是挺有意思的。 先说 s t d : : m o v e std::move std::move的两个用法#xff1a…在这里只能给出 s t d : : m o v e std::move std::move一个比较通俗的看法不能从原理上深挖真是惭愧。不过这里面涉及到一些小 t r i c k trick trick还是挺有意思的。 先说 s t d : : m o v e std::move std::move的两个用法
第一种
vectorint a {1,2,3,4};
vectorint b std::move(a);
printf(%d,a[0]);这个时候会报段错误
第二种
vectorint a { 1,2,3,4 };
vectorint b std::move(a);
printf(%d, a[0]);这个时候可以正常打印
根本原因就是 s t d : : m o v e std::move std::move之后的类型为右值引用如果把他赋值给一个右值引用那么它的值不会被窃取如果赋给一个左值那么它的值就会被窃取。
再看下面这个例子 这个例子事实上应该成功窃取并且是一个浅拷贝但是前后地址并不一样原因就是这个字符串太短了应该放在栈上而move不会把栈上的东西浅拷贝所以做了深拷贝。如果把这个长度加长嘟嘟嘟嘟成功啦复制指针哇咔咔 这个例子详见 B B B站: 这里