如何区分C++中的赋值函数、移动赋值函数和移动构造函数?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1633个文字,预计阅读时间需要7分钟。
左值引用和右值引用:左值与右值:左值:在内存中占有确定位置的对象,即左值占有内存。换句话说是有地址,有值。右值:不占有内存(科学地说,是临时存储在栈上的匿名对象),只有值,没有地址。右值:不占有内存(科学地说,是临时存储在栈上的匿名对象),只有值,没有地址。
左值引用和右值引用
左值与右值:
左值:在内存中占有确定位置的对象,即左值占有内存。换句话来说,就是有地址,有值。
右值:不占内存(科学地讲是临时寄存器),仅有值,为临时变量。
左右值的切换:
右值->左值:用*符号。
int a=10;int* b=&a;// b为右值。
*b=20;// b为右值,*b为左值。
左值->右值:用&符号。
int a = 10;&a = 40; //错误:赋值操作要求一个左值
int* b = &(a + 1); //错误:‘&’运算符要求一个左值,a为左值,但a+1为右值。
int* c = &a; //正确:var是左值
左值引用:将左值绑定在引用上。
第一种情况,函数返回右值。
int global = 10;int test()
{
return global;// 返回右值
}
int main()
{
test() = 20;// error,右值不可赋值!
cout << "test为:"<<test();
return 0;
}
第二种情况,函数返回左值。
本文共计1633个文字,预计阅读时间需要7分钟。
左值引用和右值引用:左值与右值:左值:在内存中占有确定位置的对象,即左值占有内存。换句话说是有地址,有值。右值:不占有内存(科学地说,是临时存储在栈上的匿名对象),只有值,没有地址。右值:不占有内存(科学地说,是临时存储在栈上的匿名对象),只有值,没有地址。
左值引用和右值引用
左值与右值:
左值:在内存中占有确定位置的对象,即左值占有内存。换句话来说,就是有地址,有值。
右值:不占内存(科学地讲是临时寄存器),仅有值,为临时变量。
左右值的切换:
右值->左值:用*符号。
int a=10;int* b=&a;// b为右值。
*b=20;// b为右值,*b为左值。
左值->右值:用&符号。
int a = 10;&a = 40; //错误:赋值操作要求一个左值
int* b = &(a + 1); //错误:‘&’运算符要求一个左值,a为左值,但a+1为右值。
int* c = &a; //正确:var是左值
左值引用:将左值绑定在引用上。
第一种情况,函数返回右值。
int global = 10;int test()
{
return global;// 返回右值
}
int main()
{
test() = 20;// error,右值不可赋值!
cout << "test为:"<<test();
return 0;
}
第二种情况,函数返回左值。

