#include "ex_object.h" // 左值引用与右值引用 void lrvalue() { // 左值引用与右值引用有什么区别,左值引用和右值引用的目的是什么? } // 复制构造函数,仅接受左值。 // CHouse::CHouse(CHouse& rh) // { // std::cout << "构造函数(仅接受左值)" << std::endl; // } // 复制构造函数,左值右值均可。 CHouse::CHouse(const CHouse& rh) { std::cout << "构造函数(左值右值均可)" << std::endl; } // 移动构造函数仅接受右值。 CHouse::CHouse(CHouse&& rv) noexcept { // 移动语义要修改rv的值,故不能使用const。 std::cout << "移动构造函数(仅接受右值)" << std::endl; } // 赋值构造函数,左右值均可。 CHouse& CHouse::operator=(const CHouse& rh) { // 需要前面已经定义,否则调用的时复制构造函数。ß std::cout << "赋值构造函数(左右值均可)" << std::endl; return *this; } // 赋值构造函数,仅接受右值。 // CHouse& CHouse::operator=(CHouse&& rv) noexcept // { // std::cout << "赋值构造函数(仅接受右值)" << std::endl; // return *this; // } void demo() { CHouse houseA; CHouse houseB = std::move(houseA); CHouse houseC = houseB; houseA = houseB; CHouse houseD(houseC); CHouse houseE(std::move(houseD)); }