来自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; <----------------
}
Run Code Online (Sandbox Code Playgroud)
rlb*_*ond 13
poly的价值将被复制到_poly- 但你将在这个过程中制作一个额外的副本.更好的方法是通过const引用传递:
void polynomial::Set(const vector<int>& poly) {
_poly = poly;
}
Run Code Online (Sandbox Code Playgroud)
编辑我在关于复制和交换的评论中提到过.实现你想要的另一种方法是
void polynomial::Set(vector<int> poly) {
_poly.swap(poly);
}
Run Code Online (Sandbox Code Playgroud)
这为您提供了强大的异常保证而非基本保证的额外好处.在某些情况下,代码也可能更快,但我认为这更像是一个奖励.唯一的问题是这个代码可能被称为"难以阅读",因为必须意识到有一个隐含的副本.