gpt4 book ai didi

c++ - 复制赋值运算符应该按 const 引用还是按值传递?

转载 作者:可可西里 更新时间:2023-11-01 17:37:54 30 4
gpt4 key购买 nike

在 C++11 之前,复制赋值运算符应该始终通过 const 引用传递,就像这样:

template <typename T>
ArrayStack<T>& operator= (const ArrayStack& other);

但是,随着 move 赋值运算符和构造函数的引入,似乎有些人提倡使用按值传递来代替复制赋值。还需要添加一个 move 赋值运算符:

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 及更高版本创建复制赋值运算符时使用按值传递是个好主意吗?什么情况下应该这样做?

最佳答案

Prior to C++11, it has always been the case that copy assignment operator should always pass by const reference

事实并非如此。最好的方法一直是使用 the copy-and-swap idiom ,这就是您在此处看到的内容(尽管正文中的实现不是最佳的)。

如果有的话,这在 C++11 中不太有用,因为您也有一个 move 赋值运算符。

关于c++ - 复制赋值运算符应该按 const 引用还是按值传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38808504/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com