返回值牵扯到Move Semantic和Copy Elision规则(RVO/NRVO)的混合,而且对应的标准条款是有变化的,
能搞得一清二楚很不容易,能搞清楚相关的lvalue/prvalue/xvalue也是不容易的。C++码农太难了
这还有个举了个协变(covariant)的返回值例子(针对老编译器的)。
通常不要针对返回值给加上std::move,但clang 3.8这里要求加上std::move:
https://source.coveo.com/2018/11/07/interaction-between-move-semantic-and-copy-elision-in-c++/
【 在 lushan5436 的大作中提到: 】
: 对啊,说的是返回,(你显示调用std::move(XXX),当然会move)
: 如果正常调用,return xxx;// 无论xxx是什么类型,都不会有copy 或move
: 这里面举的 `返回值的变量加上个const` ,有没有const,都不会实际影响(只要能编译过,不能编译过是因没有copy ctor,比如 const std::unique_ptr<T> t;return t;这种),因为都会被优化掉,而不会真的去调用move或者copy。
: ...................
--
FROM 114.254.46.*