首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制赋值操作符是通过const引用还是按值传递?

复制赋值操作符是通过const引用还是按值传递?
EN

Stack Overflow用户
提问于 2016-08-06 20:38:25
回答 1查看 1.6K关注 0票数 10

在C++11之前,复制赋值操作符应该始终通过const引用传递,如下所示:

代码语言:javascript
复制
template <typename T>
ArrayStack<T>& operator= (const ArrayStack& other);

然而,随着移动赋值运算符和构造函数的引入,似乎有人主张使用pass值来代替复制分配。还需要添加移动赋值操作符:

代码语言:javascript
复制
template <typename T>
ArrayStack<T>& operator= (ArrayStack other);
ArrayStack<T>& operator= (ArrayStack&& other);

上面的2操作符实现如下所示:

代码语言:javascript
复制
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继续创建副本赋值操作符时使用pass值是个好主意吗?在甚麽情况下,我应该这样做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-06 20:44:35

在C++11之前,复制赋值操作符总是通过const引用传递的。

那不是真的。最好的方法一直是使用the copy-and-swap idiom,这就是您在这里看到的(尽管主体中的实现不是最优的)。

如果有的话,这在C++11中就不那么有用了,因为您也有一个移动赋值操作符。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38808504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档