对啊,说的是返回,(你显示调用std::move(XXX),当然会move)
如果正常调用,return xxx;// 无论xxx是什么类型,都不会有copy 或move
这里面举的 `返回值的变量加上个const` ,有没有const,都不会实际影响(只要能编译过,不能编译过是因没有copy ctor,比如 const std::unique_ptr<T> t;return t;这种),因为都会被优化掉,而不会真的去调用move或者copy。
还有函数返回时,使用return std::move(t);是个错误的用法
所以,这个规则是个错的。
【 在 z16166 的大作中提到: 】
: 楼主这个例子,是说不要给充当返回值的变量加上个const吧,因为没有const,那么在NRVO时就可以执行move(前提是有move ctor,不管是编译器提供的,还是码农提供的),并且最后有可能把move也给优化掉。
: 返回的是值的话,实测有没const都一样
: 可以搞个demo程序,看看这几种情况下编译器是怎么优化的
: ...................
--
FROM 120.244.162.*