0

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

例如:

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);
  }
};

//版本。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;
}

//版本。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;
}

首选哪个版本的函数?即使vector的内容不是基本类型,Ver.1是否总是保证RVO?

4

0 回答 0