gpt4 book ai didi

C++:赋值运算符:值传递( copy-and-swap )与引用传递

转载 作者:行者123 更新时间:2023-12-01 14:18:27 26 4
gpt4 key购买 nike

考虑到copy-and-swap idiom的优点...

为什么我们仍然需要接受引用作为主流的复制赋值运算符?

class T {
public:

// 1: Why still commonly this?
T& operator=(const T& rhs);

// 2: Why not mostly that?
T& operator=(T rhs);
}

有答案建议使用后者( herehere )。

但是,大多数 SO 示例仍然围绕 pass-by-reference operator=

甚至合并的 C++ FAQ points out (是的,它是关于 const ,但是...):

A class Fred’s copy constructor and assignment operator should have const in the parameter: respectively Fred::Fred(const Fred&) and Fred& Fred::operator=(const Fred&)



显然, copy-and-swap 可以通过引用传递来实现 - 如果无论如何都要进行复制,则没有必要。人们可能还想避免在调用时立即复制(在正文中有条件地执行它)-那不是不太常见的情况(可能是过早的优化)吗?

不应该使用按值传递赋值的 copy-and-swap 作为默认方法吗?

最佳答案

通过引用传递是为了在您需要更快的执行时避免不必要的复制,而在您希望快速且只读地传递它时,传递一个常量引用是为了避免不必要的复制。复制传递是指您希望复制对象以便能够在函数的执行/实现过程中对其进行操作。

关于C++:赋值运算符:值传递( copy-and-swap )与引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61574514/

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