C++11 左值、右值引用

源码 2024-9-6 09:03:11 57 0 来自 中国
看了这方面的内容,照旧一孔之见,简单总结一下
左值和右值

简单来讲,左值就是能放在等号左边,也能放在等号右边的值,而右值是只能放在等号右边的值。至于怎么区分,我以为不必要特意去学习,用得多了自然也就认识了。
左值引用

左值引用有两种:左值引用和常左值引用。

  • 左值引用&:只能引用左值
  • 常左值引用const &:可以引用左值和右值
    int x = 1;    int& y0;  //编译器报错“引用变量必要初始值设定项”    int& y1 = x;  //可以    int& y2 = 1;  //编译器报错“非常量引用的初始值必须为左值”    const int& z0;  //编译器报错“引用变量必要初始值设定项”    const int& z1 = x;  //可以    const int& z1 = 1;  //可以右值引用


  • 只能对右值举行引用
    留意右值引用等号左边的范例必须是详细的范例,不能是auto大概模板参数T
    int x = 1;      int&& a0;  //编译器报错“引用变量必要初始值设定项”    int&& a1 = x;  //编译器报错“无法将右值引用绑定到左值”    int&& a2 = 1;  //可以    const int&& b0;  //编译器报错“引用变量必要初始值设定项”    const int&& b1 = x;  //编译器报错“无法将右值引用绑定到左值”    const int&& b2 = 1;  //可以全能引用

全能引用可以是左值引用,也可以是右值引用。详细是那种引用是根据引用对象推导出来的。

  • 引用对象是左值,该全能引用是左值引用




  • 引用对象是右值,该全能引用是右值引用

    2.png
  • 存在范例推导才是全能引用,也就是有这两种环境是全能引用:一是有auto,二是存在模板参数T

    3.png
  • 全能引用只能推导引用范例,转换成左值引用或右值引用,并不能转换变量值的范例,也就是说不管等号右边的值是左值照旧右值,得到等号左边的值永久是左值
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-23 20:27, Processed in 0.164521 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表