zoukankan      html  css  js  c++  java
  • 4.1 中的左值和右值

    摘要:  引自---http://www.cnblogs.com/catch/p/3500678.html

    左值 (lvalue)和右值 (rvalue) 是 c/c++ 中一个比较晦涩基础的概念,有的人可能甚至没有听过,但这个概念到了 c++11 后却变得十分重要,它们是理解 move, forward 等新语义的基础。

    左值右值的定义

    左值与右值这两概念是从 c 中传承而来的,在 c 中,左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能出现在等号右边的变量(或表达式).

    复制代码
    int a;
    int b;
    
    a = 3;
    b = 4;
    a = b;
    b = a;
    
    // 以下写法不合法。
    3 = a;
    a+b = 4;
    复制代码

    在 c 语言中,通常来说有名字的变量就是左值(如上面例子中的 a, b),而由运算操作(加减乘除,函数调用返回值等)所产生的中间结果(没有名字)就是右值,如上的 3 + 4, a + b 等。我们暂且可以认为:左值就是在程序中能够寻值的东西,右值就是没法取到它的地址的东西(不完全准确),但如上概念到了 c++ 中,就变得稍有不同。

    具体来说,在 c++ 中,每一个表达式都会产生一个左值,或者右值,相应的,该表达式也就被称作“左值表达式", "右值表达式"。对于内置的基本数据类型来说(primitive types),左值右值的概念和 c 没有太多不同,不同的地方在于自定义的类型,而且这种不同比较容易让人混淆:

    1) 对于内置的类型,右值是不可被修改的(non-modifiable),也不可被 const, volatile 所修饰(cv-qualitification ignored)

    2) 对于自定义的类型(user-defined types),右值却允许通过它的成员函数进行修改。

    对于 1),这和 C 是一致的,2) 却是 c++ 中所独有, 因此,如果你看到 c++ 中如下的写法,千万不要惊讶:

  • 相关阅读:
    spring-cloud Feign
    spring-cloud eureka注册发现
    spring-cloud zuul网关
    正则表达式整理
    nginx配置-Rewrite
    nginx配置-main
    nginx用途
    Java命令行命令
    Task
    JavaScript难点整理
  • 原文地址:https://www.cnblogs.com/584709796-qq-com/p/4909367.html
Copyright © 2011-2022 走看看