簡體   English   中英

為什么在類型已經為T &&類型時移動std :: move

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM