考虑到抄袭互换成语的优势。
为什么我们仍然需要复制赋值操作员接受引用作为主流?
class T {
public:
// 1: Why still commonly this?
T& operator=(const T& rhs);
// 2: Why not mostly that?
T& operator=(T rhs);
}然而,大多数这样的例子仍然围绕着按引用传递operator=。
甚至合并了C++ FAQ 指出 (是的,是关于const的,但是.):
class Fred的复制构造函数和赋值操作符应该在参数中包含const:分别是Fred::Fred(const Fred&)和Fred& Fred::operator=(const Fred&)。
显然,复制和交换是可以通过按引用传递的-如果复制无论如何都是不必要的。人们还可能希望避免立即进行复制(在体内有条件地执行)--这不是较少的情况(可能是过早的优化)吗?
不应该使用按值传递的方法来复制和交换??
发布于 2020-05-04 15:30:08
我被指到了有价值的提示
例如,有没有想过为什么高性能/经常使用std::类型如
std::vector和std::string不使用复制/交换?
我发现的关于交换副本的一切都是关于优化(避免复制,重新使用lhs):
lhs有rhs的空间时,另一种常见的可能性发生在(STL)容器中:
类容器{ public: //如果通过值传递,创建的副本将无条件地增加容量: T& operator=(const容器& rhs) { // .如果(此->容量() >= rhs.size()) { //重用能力.}其他{ //增加容量.}}
注意,提示还提到(STL)容器。operator=的折中之处是:
有关答复:
发布于 2020-05-03 12:41:17
当您需要更快的执行时,传递引用是为了避免不必要的复制,而传递const引用是当您想要快速传递它并且只读的时候。而传递复制是当您希望复制对象以便能够在函数的执行/实现过程中对其进行操作时。
发布于 2020-05-03 13:09:39
由于复制可能被删除,第二个选项可能不会在每个类上工作,因为它会创建虚假的、无用的副本。
第一种选择有很多(如果不是全部的话)的优点:没有拷贝,只读语义,总是可用的.
https://stackoverflow.com/questions/61574514
复制相似问题