我閱讀了很多關于右值鏈接的資訊,我什么都懂,但是我遇到了這個例子:
template<class T, class Arg>
T* make_raw_ptr(Arg &&arg)
{
return new T(arg);
};
如果在make_raw_ptr不使用 my_forward 函式的情況下將右值傳遞給函式,則在使用 new T 時,將有一個復制建構式,而不是移動建構式。我知道這arg將是左值,盡管它是右值參考,但我有一個問題。static_cast arg當它已經是一個右值鏈接時,為什么要創建一個右值鏈接,而使用一個static_cast<A&&>到arg,移動建構式將被呼叫?
uj5u.com熱心網友回復:
arg其本身是一個運算式,表示由 參考的物件arg,其值類別為lvalue。arg實際上是什么型別并不重要。變數/函式引數本身的名稱始終是左值運算式。
static_cast<A&&>(arg)是一個表示與 完全相同的物件的運算式arg,但它的類別是rvalue(和xvalue)。當您將此運算式用作建構式引數時,將首選移動建構式。與 的效果相同std::move(arg)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/472992.html
