我想知道在C++11之后,仍需要在哪些情况下在参数中使用const引用。我并不完全了解移动语义,但我认为这是一个合法的问题。本问题仅针对一些情况,其中const引用替代了要进行复制但只需要“读取”值的情况(例如使用const成员函数)。
通常我会编写一个(成员)函数如下:
通常我会编写一个(成员)函数如下:
#include <vector>
template<class T>
class Vector {
std::vector<T> _impl;
public:
void add(const T& value) {
_impl.push_back(value);
}
};
但我认为可以安全地假设,如果我像这样编写它,并且class T
当然实现了移动构造函数,那么编译器会使用移动语义进行优化:
#include <vector>
template<class T>
class Vector {
std::vector<T> _impl;
public:
void add(T value) {
_impl.push_back(value);
}
};
我理解的对吗?如果是这样,那么可以安全地假设它可以在任何情况下使用吗?如果不是,我想知道哪些情况下不能使用。 这将使生活变得更加轻松,因为我不需要为基本类型实现类专门化,此外,看起来更加清晰。
vector::push_back
会复制对象。你需要使用emplace_back
。 - Cubicvector
的后面时进行复制。我想知道编译器是否能够通过移动语义(参见第二个示例)消除第二个副本。 - Tim