来自C#,其中类实例通过引用传递(即,当您调用函数而不是值的副本时传递引用的副本),我想知道它在C++中是如何工作的.在下面的例子中,_poly = poly,是否将poly的值复制到_poly,或者是什么?
#include <vector>
using namespace std;
class polynomial {
    vector<int> _poly;
public:
    void Set(vector<int> poly);
};
void polynomial::Set(vector<int> poly) {
    _poly = poly;                             <----------------
}
rlb*_*ond 13
poly的价值将被复制到_poly- 但你将在这个过程中制作一个额外的副本.更好的方法是通过const引用传递:
void polynomial::Set(const vector<int>& poly) {
    _poly = poly;                      
}
编辑我在关于复制和交换的评论中提到过.实现你想要的另一种方法是
void polynomial::Set(vector<int> poly) { 
    _poly.swap(poly); 
}
这为您提供了强大的异常保证而非基本保证的额外好处.在某些情况下,代码也可能更快,但我认为这更像是一个奖励.唯一的问题是这个代码可能被称为"难以阅读",因为必须意识到有一个隐含的副本.