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站长网) |
相关内容
网友评论
推荐文章
热点阅读