我该用什么参数类型?
本文我们讨论一个很小的问题:不同的函数参数类型都在什么情况下使用? 参数分类 比如我们有一个类型 T(让问题先简单点,此处 T 并非范型),那么要在函数中传入一个该类型的参数,共有几种可能?我们可以分一下类: 修饰符:有 const 修饰、无 const 修饰 是否引用:值、左值引用、右值引用 按照这个分类,我们总共能得出 5 种参数类型 const修饰 是否引用 参数类型 有 值 const T 有 左值引用 const T& 无 值 T 无 左值引用 T& 无 右值引用 T&& const T&& 是没有意义的 接下来介绍这些参数类型的应用场景 转移所有权的情况 假设需要将参数的生命周期转移到函数内,那么大多数情况下,直接使用 T 作为参数类型即可。 例如我们有类型 A,其构造时会接受并持有一个 std::vector<int> 参数。那么参数类型应当为 std::vector<int>。 class A { public: A(std::vector<int> v) : v_(std::move(v)) {} private: std::vector_<int> v_; }; 我们考虑两种构造类型 A 对象的情况。其一是我们在传入 std::vector<int> 对象后不会再使用该对象。这时我们可以采取移动语义。 std::vector<int> v; // ... A a(std::move(v)); 其二是我们在传入 std::vector<int> 对象后还会使用该对象。这是我们需要采取复制语义。...