ここに私のコードがあります:
#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 m(dummy());
出力:なし
使用してtest t(std::move(dummy()));
出力:
dummy constructed
dummy move init
test
これは期待されるものです。
私の質問は、
std::move
パラメータが の場合、使用は必須type&&
ですか? 右辺値と見なされないdummy()
のに、なぜ使用する必要があるのstd::move
ですか? 右辺値を右辺値参照にバインドすることについてどういうわけか混乱しており、明確化が必要です。