我的问题是如何编写创建对象的函数。
例如:
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吗?