我应该信任RVO还是使用移动语义?

时间:2017-10-18 21:13:22

标签: c++ c++11 move-semantics rvo

我的问题是如何编写创建对象的函数。

例如:

class MyVector {
public:
  std::vector<int> vec_;
  MyVector() = default;
  MyVector(const MyVector&) = default;
  MyVector& operator=(const MyVector&) = default;
  MyVector(MyVector&&) = default;
  MyVector& operator=(MyVector&&) = default;
  void add(int value) {
    vec_.push_back(value);
  }
};

// Ver。 1个职能:

std::string to_string(const MyVector& vec) {
    std::string vecStr;
    for(const auto value: vec.vec_) {
        vecStr += std::to_string(value);
    }
    return vecStr;
}

MyVector create_vector() {
    MyVector vec;
    for(int i = 0; i < 1000; ++i) {
        cout << i << endl;
        vec.add(i);
    }
    return vec;
}

// Ver。 2个功能:

std::string toString(const MyVector& vec) {
    std::string vecStr;
    for(const auto value: vec.vec_) {
        vecStr += std::to_string(value);
    }
    return std::move(vecStr);
}

MyVector createVector() {
    MyVector vec;
    for(int i = 0; i < 1000; ++i) {
        vec.add(i);
    }
    return std::move(vec);
}

主要:

int main()
{
    MyVector vec1 = create_vector();
    MyVector vec2 = std::move(createVector());
    std::string vec1Str = to_string(vec1);
    std::string vec2Str = std::move(toString(vec2));
    std::cout << vec1Str << std::endl;
    std::cout << vec2Str << std::endl;

    return 0;
}

首选哪个版本的功能?即使向量的内容不是基本类型,Ver.1总能保证RVO吗?

0 个答案:

没有答案