如何区分C++中的赋值函数、移动赋值函数和移动构造函数?

2026-05-29 13:104阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1633个文字,预计阅读时间需要7分钟。

如何区分C++中的赋值函数、移动赋值函数和移动构造函数?

左值引用和右值引用:左值与右值:左值:在内存中占有确定位置的对象,即左值占有内存。换句话说是有地址,有值。右值:不占有内存(科学地说,是临时存储在栈上的匿名对象),只有值,没有地址。右值:不占有内存(科学地说,是临时存储在栈上的匿名对象),只有值,没有地址。

左值引用和右值引用

左值与右值:

左值:在内存中占有确定位置的对象,即左值占有内存。换句话来说,就是有地址,有值。

右值:不占内存(科学地讲是临时寄存器),仅有值,为临时变量。

左右值的切换:

右值->左值:用*符号。

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分钟。

如何区分C++中的赋值函数、移动赋值函数和移动构造函数?

左值引用和右值引用:左值与右值:左值:在内存中占有确定位置的对象,即左值占有内存。换句话说是有地址,有值。右值:不占有内存(科学地说,是临时存储在栈上的匿名对象),只有值,没有地址。右值:不占有内存(科学地说,是临时存储在栈上的匿名对象),只有值,没有地址。

左值引用和右值引用

左值与右值:

左值:在内存中占有确定位置的对象,即左值占有内存。换句话来说,就是有地址,有值。

右值:不占内存(科学地讲是临时寄存器),仅有值,为临时变量。

左右值的切换:

右值->左值:用*符号。

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

第二种情况,函数返回左值。

阅读全文