這個問題在這里已經有了答案: 為什么右值參考變數不是右值? (3 個回答) 昨天關閉。
我有以下一段代碼:
#include <iostream>
struct T {
int a;
T() = default;
T(T& other) {
std::cout << "copy &\n";
}
T(T&& other) {
std::cout << "move &&\n";
}
};
void foo(T&& x) {
T y(x); // why is copy ctor called??????
}
int main() {
T x;
foo(std::move(x));
return 0;
}
我不明白為什么即使foo()接受右值參考,復制建構式也比移動建構式更受歡迎。
uj5u.com熱心網友回復:
x本身就是一個左值,即使它的型別是右值參考。值類別和型別是兩個獨立的屬性。
即使變數的型別是右值參考,由其名稱組成的運算式也是左值運算式;
您需要使用std::move將其轉換為右值,就像使用std::moveon xin 一樣main()。
void foo(T&& x)
{
T y(std::move(x));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/366723.html
上一篇:多載輸出運算子未按預期作業
