[英]Why std::move when type is already of the type T&&
今天,我已經在人們的答案中看到了一些地方,比如說我有Foo的構造函數。
Foo( std::vector<SomeType>&& data) noexcept : data_(std::move(data)) {};
為什么std :: move(data)是必需的,因為數據已經不是std :: vector <SomeType> &&類型了嗎?
std :: move在我看來只是將數據再次投射到std :: vector <SomeType> &&?
http://en.cppreference.com/w/cpp/utility/move將std :: move定義為
static_cast<typename std::remove_reference<T>::type&&>(t)
因此,在這種情況下,似乎std :: move再次無關緊要,但我可能丟失了一些東西。
在這兩種情況下
void foo(const T& bar); // 1
void foo(T&& bar); // 2
bar
實際上是一個lvalue
。 &&
含義是重載2
將綁定到右值,例如在以下情況下:
foo(Bar());
而重載1
將在這里綁定:
T bar;
foo(bar);
在2
,您仍然需要使用std::move
使bar
外觀和行為類似於函數內部的rvalue
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.