向量作为构造参数传递

时间:2019-05-27 22:35:37

标签: c++ vector constructor

如果我有与此类似的课程:

namespace Matrix {
  class Matrix; 
  class Vector {
   public:
    //i want to create a vector the same size as contents with the same values
    Vector(const std::vector<ValueType>& contents);
   private:
   std::vector<ValueType> contents;
}

当内容通过构造函数传递时,它是否会自动复制到我在类中定义的称为内容的向量?还是我必须在构造函数定义中要做一些事情以实现该目标?

1 个答案:

答案 0 :(得分:0)

不,您不会仅由于构造函数具有参数而获得自动复制。您可以这样写:

Vector(const std::vector<ValueType>& contents_) : contents{contents_} { };

将执行复制。但是,由于以下两个原因,整个方法并不是一个好主意:

  1. 如果将右值传递给构造函数(例如,从某个函数获得的临时向量),则const &将产生一个额外的副本。
  2. 为什么只愿意从std :: vector初始化数据?您应该愿意至少接受一个std::span,或者接受一个容器或一对迭代器上的模板。
  3. 实际上,我会考虑在基础容器上模板化整个内部向量类。