我在C++中有一个非常基本的问题.返回对象时如何避免复制?
这是一个例子:
std::vector<unsigned int> test(const unsigned int n)
{
std::vector<unsigned int> x;
for (unsigned int i = 0; i < n; ++i) {
x.push_back(i);
}
return x;
}
Run Code Online (Sandbox Code Playgroud)
据我了解C++是如何工作的,这个函数将创建2个向量:本地一个(x),以及将返回的x的副本.有没有办法避免副本?(我不想返回指向对象的指针,但是对象本身)
使用"移动语义"(在评论中说明)该函数的语法是什么?
那么为什么不能在“ const Integer operator +(const Integer&rv) ”函数中调用Copy构造函数。是因为RVO。如果是,我需要采取什么措施来防止这种情况发生?
#include <iostream>
using namespace std;
class Integer {
int i;
public:
Integer(int ii = 0) : i(ii) {
cout << "Integer()" << endl;
}
Integer(const Integer &I) {
cout << "Integer(const Integer &)" << endl;
}
~Integer() {
cout << "~Integer()" << endl;
}
const Integer operator+(const Integer &rv) const {
cout << "operator+" << endl;
Integer I(i + rv.i);
I.print();
return I;
}
Integer &operator+=(const Integer &rv) {
cout << "operator+=" …Run Code Online (Sandbox Code Playgroud)