设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

C++11右值引用 一看即明白

发布时间:2022-07-13 11:23 所属栏目:51 来源:互联网
导读:《C++11是什么》一节中提到,在 C++98/03 标准的基础上,C++11 标准对 C++ 语言增添了约 140 个新特性。本节要讲的右值引用就是众多新特性中的一个,同时也是最重要的特性之一。 很多初学者都感觉右值引用晦涩难懂,其实不然。右值引用只不过是一种新的 C++
  《C++11是什么》一节中提到,在 C++98/03 标准的基础上,C++11 标准对 C++ 语言增添了约 140 个新特性。本节要讲的右值引用就是众多新特性中的一个,同时也是最重要的特性之一。
 
  很多初学者都感觉右值引用晦涩难懂,其实不然。右值引用只不过是一种新的 C++ 语法,真正理解起来有难度的是基于右值引用引申出的 2 种 C++ 编程技巧,分别为移动语义和完美转发。本节先给读者讲解什么是右值引用以及它的基本用法,至于移动语义和完美转发则放到后续章节讲解。
  C++左值和右值
  右值引用可以从字面意思上理解,指的是以引用传递(而非值传递)的方式使用 C++ 右值。关于 C++ 引用,已经在《C++引用》专题给大家做了详细的讲解,这里不再重复赘述。接下来重点给大家介绍什么是 C++ 右值。
 
  在 C++ 或者 C 语言中,一个表达式(可以是字面量、变量、对象、函数的返回值等)根据其使用场景不同,分为左值表达式和右值表达式。确切的说 C++ 中左值和右值的概念是从 C 语言继承过来的。
  值得一提的是,左值的英文简写为“lvalue”,右值的英文简写为“rvalue”。很多人认为它们分别是"left value"、"right value" 的缩写,其实不然。lvalue 是“loactor value”的缩写,可意为存储在内存中、有明确存储地址(可寻址)的数据,而 rvalue 译为 "read value",指的是那些可以提供数据值的数据(不一定可以寻址,例如存储于寄存器中的数据)。
  
  需要注意的,和声明左值引用一样,右值引用也必须立即进行初始化操作,且只能使用右值进行初始化,比如:
  int num = 10;
  //int && a = num;  //右值引用不能初始化为左值
  int && a = 10;
  和常量左值引用不同的是,右值引用还可以对右值进行修改。例如:
  int && a = 10;
  a = 100;
  cout << a << endl;
  程序输出结果为 100。
 
  另外值得一提的是,C++ 语法上是支持定义常量右值引用的,例如:
  纯文本复制
  const int&& a = 10;//编译器不会报错
  但这种定义出来的右值引用并无实际用处。一方面,右值引用主要用于移动语义和完美转发,其中前者需要有修改右值的权限;其次,常量右值引用的作用就是引用一个不可修改的右值,这项工作完全可以交给常量左值引用完成。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读