我阅读了更多相关文章,但没有一个答案能够澄清我的疑虑。为什么在下面的代码中,仅当没有转换为右值引用时才会进行优化,否则会调用移动(无论是否提供)或复制(如果没有提供移动构造函数)构造函数。
struct Clasa{
Clasa(){
std::cout << "Default" << std::endl;
}
Clasa(const Clasa& clasa){
std::cout << "Copy" << std::endl;
}
Clasa(Clasa&& clasa){
std::cout << "Move" << std::endl;
}
~Clasa(){
std::cout << "Destructor" << std::endl;
}
};
int main(){
Clasa c = (Clasa&&)Clasa();//no optimization
Clasa d = Clasa();//move/copy elision
}