47 lines
1.3 KiB
C++
47 lines
1.3 KiB
C++
#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));
|
|
} |