comprecpp/cppbase/ex_object.cpp
2024-03-08 15:25:16 +08:00

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));
}