是否標準::移動需要使用通用引用時必須用的std ::前鋒組合?例如,以下兩段代碼中的哪一段是正確的?當使用轉發引用時,std :: move是否需要與std :: forward結合使用?
void bar(auto && x) {
auto y(std::move(std::forward<decltype(x)>(x)));
}
或
void bar(auto && x) {
auto y(std::move(x));
}
基本上,我想X的內存移動到y和我不在乎,如果它是一個左值引用或r值的參考。當然,我不想在這裏輸入const
值。
號只能使用其中的一種。 –
它們都等價於'auto y(std :: move(x))',它**不**轉發,只是轉換爲右值引用。請記住,'的std ::向前()'是有條件的強制轉換爲rvalue-或左值引用(取決於價值範疇),而'的std ::移動()'是*無條件*強制轉換爲rvalue-參考。 –
0x499602D2