1、左值和右值的本质区别?
左值是保存在内存里面的,而且具有名字,很多地方都说左值是可以取地址的,所以也可以直观的说,左值是有名字的内存,比如下面这段代码中,**put(Test()) ;里面的Test(),它创建了一个Test对象,但是这个对象在内存里面是没有名字的,所以它是个右值,而Test reusable ;**中的 reusable在内存中的名字就是reusable,它是个左值
class Test {
public:
int * arr{
nullptr};
Test():arr(new int[50]{
1,2,3,4}) {
cout << "default constructor" << endl;
}
Test(const Test & t) {
cout << "copy constructor" << endl;
if (arr == nullptr) arr = new int[5000];
memcpy(arr, t.arr, 5000*sizeof(int));
}
Test(Test && t): arr(t.arr) {
cout << "move constructor" << endl;
t.arr = nullptr;
}