1、返回的右值引用也好,引用也好,都是指向函数内部的栈上临时变量的,都是use-after-free的错误。
所以不能返回栈上临时变量的引用、右值引用。
2、返回栈上的临时变量时,用值返回就行,编译器会有自动的RVO优化。而且不要加std::move,加了反而会影响RVO。
std::move()是个很大的障眼法,很多人以为它会自动转移class/struct内部的数据。
如果你以为std::move会把栈上临时变量的值转移到你的main()里的那个变量v里边,这是错误的。
它只是强制把引用转为右值引用,但本质还是个引用。只有把这个右值引用传给一个移动构造、移动赋值函数时,才会发生数据转移。
【 在 hl0737 的大作中提到: 】
: 额, 我想的是不要vector值复制...如果直接返回左值, vector的内容不是会复制一份么
--
修改:z16166 FROM 123.118.191.*
FROM 123.118.191.*