cpp11 std::forward和std::move函数
时间: 2023-05-31 12:03:28 浏览: 122
在C++11中,有两个重要的函数std::forward和std::move。
std::forward函数:
std::forward函数是用来解决转发参数类型的问题的。当我们在编写一个函数模板时,如果需要将参数转发给另一个函数时,我们需要使用std::forward函数来将参数正确地转发过去。std::forward函数的定义如下:
template <class T>
constexpr T&& forward(typename std::remove_reference<T>::type& x) noexcept;
template <class T>
constexpr T&& forward(typename std::remove_reference<T>::type&& x) noexcept;
std::forward函数的作用是将一个参数转发给另一个函数,同时保留该参数的原始类型(左值或右值)。当我们需要将一个参数转发给另一个函数时,我们通常需要使用std::forward函数来实现类型转发。例如:
template <typename T>
void foo(T&& arg) {
bar(std::forward<T>(arg));
}
std::move函数:
std::move函数用于将一个对象的值转移到另一个对象中,同时将原始对象的值置为未定义状态。std::move函数的定义如下:
template <class T>
typename std::remove_reference<T>::type&& move(T&& x) noexcept;
std::move函数的作用是将一个对象的值转移到另一个对象中,同时保留该对象的原始类型(左值或右值)。当我们需要将一个对象的值转移到另一个对象时,我们通常需要使用std::move函数来实现。例如:
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = std::move(v1);
// v1现在是未定义状态,v2的值为{1, 2, 3}
阅读全文