• '=' : left operand must be lvalue 左值和右值


    我们在看书的时候,经常可以看到关于 左值(L-value) 和 右值(R-value) 的概念,那么到底什么是左值,什么是右值,它们之间的区别又是在哪里呢?

        通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了。

    举个很简单的例子:

    a=b+100;

    那么这里a就是左值,b+25就是一个右值。左值和右值之间是不一定都能互换的,上面的这个例子就是不能互换的,如果写成

    b+100=a;

    #include<stdio.h>

    void main()

    {

    int a=1;

    int b;

    b+100=a;

    printf("%d\n",a);

    }

    大家都能看出来这样写会不编译通过的,因为编译器无法判断b+100的内存地址,所以不能操作

    看了这个例子,可以做一个总结,左值必须应该是一个变量或者是表达式等,但是它的物理位置是可以确定的,而右值不一定,这也是它们两者之间的区别。

    关于左值是表达式的例子有数组,还有指针这些都可以。

    int array[10];

    int a=5;

    array[a+3]=10; //这里左值就是一个数组表达式了

     

    此文完。

     

     另外:liotta朋友给了一些其他方面的提示 (左值右值翻译可能有些问题)

    错了,没有什么左值和右值!
    翻译害人不浅,
    L-value中的L指的是Location,表示可寻址。The "l" in lvalue can be though of as location
    R-value中的R指的是Read,表示可读。The "r" in rvalue can be thought of as "read" value.   
    为什么自增(减)运算只能用于左值,不能用于右值,即表达式++(a++)为什么错误呢
    # re: 左值和右值 2008-06-07 19:28 Nash
    ++(a++) 
    a++相当于 
    int a; 

    int temp=a; 
    a++; 
    teturn temp; 

    所以我们可以将++(a++)看成++temp;而temp 
    显然是一个右值,所以不能用啊~~  回复  更多评论 
      

    # re: 左值和右值 2008-09-01 18:29 liotta
    错了,没有什么左值和右值!
    翻译害人不浅,
    L-value中的L指的是Location,表示可寻址。The "l" in lvalue can be though of as location
    R-value中的R指的是Read,表示可读。The "r" in rvalue can be thought of as "read" value.  回复  更多评论 
      

    # re: 左值和右值 2008-09-23 15:59 xautfengzi
    原创好文章,谢谢楼主。  回复  更多评论 
      

    # re: 左值和右值[未登录] 2009-02-14 07:25 Richard
    From Wikipedia, the free encyclopedia 
    Jump to: navigation, search 
    L-value or L value may refer to: 

    A value (computer science) that has an address 
    The value assigned to an L-shell, a particular set of planetary magnetic field lines 
    A measure of brightness of a lunar eclipse on the Danjon scale 

    From Wikipedia, the free encyclopedia 
    Jump to: navigation, search 
    R-value can refer to: 

    Properties of materials: 
    R-value (insulation), the efficiency of insulation 
    R-value (soils), stability of soils and aggregates for pavement construction 
    r-value, in computer science, a value that does not have an address in a computer language 
    R-factor (crystallography), a measure of the agreement between the crystallographic model and the diffraction data 
    In statistics, r (or r value) refers to the Pearson product-moment correlation coefficient, often called simply correlation coefficient 

    翻译不对,谢谢  回复  更多评论 
      

    # re: 左值和右值 2009-02-20 10:37 单曲旋律
    这是<C++ primmer>中的一部分:

    Lvalues and Rvalues
    左值和右值
    We'll have more to say about expressions in Chapter 5, but for now it is useful to know that there are two kinds of expressions in C++:

    我们在第五章再详细探讨表达式,现在先介绍 C++ 的两种表达式:

    lvalue (pronounced "ell-value"): An expression that is an lvalue may appear as either the left-hand or right-hand side of an assignment.

    左值(发音为 ell-value):左值可以出现在赋值语句的左边或右边。

    rvalue (pronounced "are-value"): An expression that is an rvalue may appear on the right- but not left-hand side of an assignment.

    右值(发音为 are-value):右值只能出现在赋值的右边,不能出现在赋值语句的左边。

    Variables are lvalues and so may appear on the left-hand side of an assignment. Numeric literals are rvalues and so may not be assigned. Given the variables:

    变量是左值,因此可以出现在赋值语句的左边。数字字面值是右值,因此不能被赋值。给定以下变量:

    int units_sold = 0;
    double sales_price = 0, total_revenue = 0;



    it is a compile-time error to write either of the following:

    下列两条语句都会产生编译错误:

    // error: arithmetic expression is not an lvalue
    units_sold * sales_price = total_revenue;
    // error: literal constant is not an lvalue
    0 = 1;



    Some operators, such as assignment, require that one of their operands be an lvalue. As a result, lvalues can be used in more contexts than can rvalues. The context in which an lvalue appears determines how it is used. For example, in the expression

    有些操作符,比如赋值,要求其中的一个操作数必须是左值。结果,可以使用左值的上下文比右值更广。左值出现的上下文决定了左值是如何使用的。例如,表达式

    units_sold = units_sold + 1;

    the variable units_sold is used as the operand to two different operators. The + operator cares only about the values of its operands. The value of a variable is the value currently stored in the memory associated with that variable. The effect of the addition is to fetch that value and add one to it.

    中,units_sold 变量被用作两种不同操作符的操作数。+ 操作符仅关心其操作数的值。变量的值是当前存储在和该变量相关联的内存中的值。加法操作符的作用是取得变量的值并加 1。

    The variable units_sold is also used as the left-hand side of 

    可以看出,左值和右值是跟左和右挂钩的。  回复  更多评论 
      

    # re: 左值和右值 2009-09-16 21:12 whtank
    ++(a++) 
    a++ return a const object we can say it is b. so ++b is wrong 
  • 相关阅读:
    poj 2892 && 3468
    hdu 2444
    反素数
    poj 2406 && 1961
    Java定时器Timer的使用
    Linux环境下如何生成core文件
    Java异步CompletableFuture的使用
    Java中线程池的使用
    Linux系统添加应用服务进程的守护进程
    C++通过Webbrowser调用JavaScript
  • 原文地址:https://www.cnblogs.com/youxin/p/2208296.html
Copyright © 2020-2023  润新知