這裏是我的代碼:使用test m(dummy());
如何正確地將rvalues綁定到構造函數?
輸出
#include <iostream>
class dummy{
public:
//constructor + destructor
dummy(){
std::cout<<"dummy constructed"<<std::endl;
}
//copy
dummy(const dummy& o){
std::cout<<"dummy copy init"<<std::endl;
}
void operator=(const&dummy){
std::cout<<"dummy copy operator"<<std::endl;
}
//moves
dummy(dummy&& other){
std::cout<<"dummy move init"<<std::endl;
}
void operator=(dummy&&){
std::cout<<"dummy move copy"<<std::endl;
}
};
class test{
public:
dummy d;
test(dummy&& d):d(std::move(d)){
std::cout<<"test"<<std::endl;
}
};
int main(int argc, char** argv) {
test m(dummy()); //prints NOTHING.
test t(std::move(dummy()));
return 0;
}
:沒有
使用test t(std::move(dummy()));
輸出:
dummy constructed
dummy move init
test
這是預期的事情。
所以我的問題是,
是否必須使用std::move
如果該參數爲type&&
? 而不是dummy()
視爲右值,爲什麼我需要使用std::move
?我有點混淆關於右值引用rvalues,我想需要一些澄清。
https://en.wikipedia.org/wiki/Most_vexing_parse – Mat