tow*_*owi 73 c++ rvalue-reference move-semantics c++11
函数应该返回RValue Reference是否有原因?技巧,技巧,或成语或模式?
MyClass&& func( ... );
Run Code Online (Sandbox Code Playgroud)
我知道一般返回引用的危险,但有时我们会这样做,不管我们(T& T::operator=(T)只是一个惯用的例子).但是怎么样T&& func(...)?我们会从中获得这样的一般场所吗?与仅仅客户端代码相比,当编写库或API代码时,可能会有所不同?
How*_*ant 57
有几次它是合适的,但它们是相对罕见的.当您希望允许客户端从数据成员移动时,在一个示例中出现这种情况.例如:
template <class Iter>
class move_iterator
{
private:
Iter i_;
public:
...
value_type&& operator*() const {return std::move(*i_);}
...
};
Run Code Online (Sandbox Code Playgroud)
Cli*_*ton 17
这跟随了towi的评论.您永远不想返回对局部变量的引用.但你可能有这个:
vector<N> operator+(const vector<N>& x1, const vector<N>& x2) { vector<N> x3 = x1; x3 += x2; return x3; }
vector<N>&& operator+(const vector<N>& x1, vector<N>&& x2) { x2 += x1; return std::move(x2); }
vector<N>&& operator+(vector<N>&& x1, const vector<N>& x2) { x1 += x2; return std::move(x1); }
vector<N>&& operator+(vector<N>&& x1, vector<N>&& x2) { x1 += x2; return std::move(x1); }
Run Code Online (Sandbox Code Playgroud)
这应该防止所有情况下的任何副本(和可能的分配),除非两个参数都是左值.
不.只需返回值.一般来说,返回引用并不危险 - 它返回对局部变量的引用是危险的.然而,返回一个右值参考在几乎所有情况下都是毫无价值的(我猜你是在写std::move什么东西).
| 归档时间: |
|
| 查看次数: |
14306 次 |
| 最近记录: |