在 C++11 之前,复制赋值运算符始终应通过 const 引用传递,如下所示:
template <typename T>
ArrayStack<T>& operator= (const ArrayStack& other);
然而,随着移动赋值运算符和构造函数的引入,似乎有人提倡使用按值传递来进行复制赋值。还需要添加移动赋值运算符:
template <typename T>
ArrayStack<T>& operator= (ArrayStack other);
ArrayStack<T>& operator= (ArrayStack&& other);
上面 2 个运算符的实现如下所示:
template <typename T>
ArrayStack<T>& ArrayStack<T>::operator =(ArrayStack other)
{
ArrayStack tmp(other);
swap(*this, tmp);
return *this;
}
template <typename T>
ArrayStack<T>& ArrayStack<T>::operator =(ArrayStack&& other)
{
swap(*this, other);
return *this;
}
在为 C++11 及更高版本创建复制赋值运算符时,使用按值传递是一个好主意吗?什么情况下我应该这样做?
在 C++11 之前,复制赋值运算符始终应通过 const 引用传递
那不是真的。最好的方法始终是使用复制和交换习语 https://stackoverflow.com/a/3279550/560648,这就是您在这里看到的(尽管主体中的实现不是最佳的)。
如果有的话,这是less现在在 C++11 中很有用,因为您也有移动赋值运算符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)