美文网首页C++2.0C++
C++11那些难事:左值与右值

C++11那些难事:左值与右值

作者: jdzhangxin | 来源:发表于2018-12-11 21:24 被阅读14次

1. 背景

左值右值其实是各种语言普遍存在一种语法,只是在C++11中变得比较突出,原因是C++11中增加了一些与左值右值相关的语法,例如左值引用(&)、右值引用(&&)、以及moveforward。下面做一些浅显易懂的介绍。

2. 概念

首先,了解一下什么是左值与右值。

  • 右值:只能=右边的值。
  • 左值:可以=左边的值。

就是这么简单,但是注意黑体字的区别,它暗含了下面的含义:

  1. 右值不能在=左边。
  2. 左值也可以在=右边。

那么,接下来说一下C++11,那些是左值,那些是右值?

概念 说明 举例
左值 有名称的值/对象 所有变量(包括const变量)
右值 无名临时值/对象 通常是字面量(数字、字符串)、临时对象或者表达式。

举例

int n = 1;
string s = "Hello World";
const float PI = 3.1415926535;
const float PI_2 = PI * 2;
string t = string("abc");

上面这些n,s,PI,PI_2t都是左值,1"Hello World"3.1415926535PI * 2,string("abc")这些都是右值。

说明
字符串字面量的右值身份存在争议,因为它可以取地址,例如:&("abc"),但它是货真价实的右值。

3. 区别

上面对左值与右值做了表面的区分,下面来看一下二者深层次的区别。

No. 分类 左值 右值
1 生存周期 语句外(语句结束还存在) 语句内(语句结束就不存在了)
3 操作 可以取地址 不可以取地址(字符串字面量除外)

问题
上面提到了变量、常量、字面量、对象、表达式作为左值右值的情况,那么函数是左值还是右值?

相关文章

  • C++11那些难事:左值引用、右值引用与完美转发

    上一篇C++那些难事:左值与右值搞明白左值与右值,下面讲解左值引用与右值引用。 1. 左值引用与右值引用 左值右值...

  • C++11: 右值引用

    C++11: rvalue 右值 rvalue & lvalue(右值与左值) 左值与右值的定义是比较复杂,下边仅...

  • C++11那些难事:左值与右值

    1. 背景 左值右值其实是各种语言普遍存在一种语法,只是在C++11中变得比较突出,原因是C++11中增加了一些与...

  • 360一面

    C++11 左值、右值、左值引用、右值引用https://blog.csdn.net/Tanswer_/artic...

  • 右值引用

    参考资料 谈谈 C++ 中的右值引用C++11 左值、右值、右值引用详解

  • 左值引用、右值引用、移动语义、完美转发,你知道的不知道的都在这里

    众所周知C++11新增了右值引用,谈右值引用我们也可以扩展一些相关概念: 左值 右值 纯右值 将亡值 左值引用 右...

  • C++11 左值 右值

    左值、右值   在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以...

  • C++11 左值、右值、右值引用详解

    左值、右值 在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地...

  • C++11之move语义

    要理解c++11的move语义,就需要理解C++中的左值和右值和临时对象的概念。 左值与右值和临时对象的简单介绍:...

  • C++学习笔记

    基本知识 右值引用C++11新特性,在出现右值引用之前,只有左值可以被引用,方法为&(例如int& a)。与之对应...

网友评论

    本文标题:C++11那些难事:左值与右值

    本文链接:https://www.haomeiwen.com/subject/llxcqqtx.html