您好, 谢谢您的回答.
您的回答中提到, 只有把这个右值引用传给一个移动构造、移动赋值函数时,才会发生数据转移。
我是这样想的, 在get_cmp_files这个子函数中, 返回vector&&, 在主函数中用auto v = get_cmp_files("cmp");中的v变量接住, 我理解这时候会调用vector的移动构造函数, 从而让v的堆直接指向get_cmp_files函数中的res堆, 避免值语义的复制构造.
【 在 z16166 的大作中提到: 】
: 1、返回的右值引用也好,引用也好,都是指向函数内部的栈上临时变量的,都是use-after-free的错误。
: 所以不能返回栈上临时变量的引用、右值引用。
: 2、返回栈上的临时变量时,用值返回就行,编译器会有自动的RVO优化。而且不要加std::move,加了反而会影响RVO。
: ...................
--
FROM 106.120.11.*