C++-lvalue 表示左值

对于变量而言, 左值可以使用 int& val = num;  对于常数而言,右值可以使用const int& val = num; 临时变量是右值

/*
左值
*/
#include <iostream>

using namespace std; 

int func(void) {
    int num = 100;
    return num; //返回值是右值
}

int main() {
    //int& r = 100; //error 100不能赋予左值
    const int& r = 100;
    //int& r4 = func(); //表示进行左值定义
    const int& r5 = func(); //表示对右值进行赋值
    cout << r5 << endl;

    int a = 5, b = 2;
    const int& r6 = a + b; //表示使用右值进行赋值
    //int& r6 = a + b; //表示进行左值赋值  

    char c = ‘a‘;
    const int& r3 = c;
    cout << "&c=" << (void* )&c << endl;
    cout << "&r3=" << &r3 << endl;
    return 0;
}

对于引用而言,只能使用左值来进行赋值操作

/*
对于a++的左值操作
*/
#include <iostream>

using namespace std; 

int main() {
    int a = 1;
    cout << ++a << endl;
    cout << a << endl;
    int& b = a;
    const int& c = a;
    cout << c << endl; 

    int& d = ++a;
    cout << d << endl; 

    (a = 10) = 20; 

    int& e = (a = 10);
    cout << e << endl; 

}

原文地址:https://www.cnblogs.com/hyq-lst/p/12599004.html

时间: 2024-10-08 09:44:24

C++-lvalue 表示左值的相关文章

C++ lvalue(左值)和rvalue(右值)

lvalue(左值)和rvalue(右值) 昨天写代码遇见一个这样的错误:{ "cannot bind non-const lvalue reference of type 'int&' to an rvalue of type 'int'",代码类似下边 class MyClass { int data; public: MyClass(int& e):data(e){}; }; int main(){ MyClass c(10); return 0; } 编译器告诉

C++引用(左值引用)

1. 相关概念 C++引用分两种:lvalue reference(左值引用)和rvalue reference(右值引用).本文讨论的是lvalue reference(左值引用). 1.1 lvalue(左值)和rvalue(右值) 在讨论C++引用之前,我们需要先搞清楚两个概念:lvalue(左值)和rvalue(右值). lvalue(左值)和rvalue(右值)是对每个C++表达式值类别的区分. 一个表达式的值类别是左值,那么这个表达式有两点性质:1)可以放在赋值运算符'='的左边:2

左值(Lvalue)和右值(Rvalue)

左值和右值得问题,初步理解就是: int i = 5: 左值是一个变量(内存区域)的引用,是可变的,i是左值:右值是不变的,5是右值: 注意: ++i是左值,i++是右值. 因为++i 返回 i 本身,而 i++ 返回 i 的值. a++ 即是返回 a的值,然后变量 a 加 1,返回需要产生一个临时变量类似于 { int temp = a; a=a+1; return temp; //返回右值 } ++a 则为: { a=a+1; return &a; //返回左值 } 显然,前增量不需要中间变

对左值(lvalue)和右值(rvalue)的两种理解方式

在<C++ Primer 中文版(第五版)>(电子工业出版社)中的说法有: 当一个对象被用作右值的时候,用的是对象的值(内容):当对对象被用作左值的时候,用的是对象的身份(在内存中的位置). 而我在再次学习计算机原理中的"代码区.常量区.全局(静态)区.堆区.栈区"后想到的一个新理解是: 右值是不可控的,左值是可控的. 右值,要么在程序一开始运行以后就已经确定了,要么是程序运行到一定程度,系统就会确定的值,在值生成以后无法再次改变这个内容(当然也包括临时值):而左值可以随意

c++中的左值与右值

++(a++) a++相当于 int a; { int temp=a; a++; teturn temp; } 所以我们可以将++(a++)看成++temp;而temp 显然是一个右值,所以不能用啊~~ L-value中的L指的是Location,表示可寻址.The "l" in lvalue can be though of as locationR-value中的R指的是Read,表示可读.The "r" in rvalue can be thought of

4.1 中的左值和右值

摘要:  引自---http://www.cnblogs.com/catch/p/3500678.html 左值 (lvalue)和右值 (rvalue) 是 c/c++ 中一个比较晦涩基础的概念,有的人可能甚至没有听过,但这个概念到了 c++11 后却变得十分重要,它们是理解 move, forward 等新语义的基础. 左值右值的定义 左值与右值这两概念是从 c 中传承而来的,在 c 中,左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能出现在等号右边的变量

认识左值与常引用

代码编译运行环境:VS2012+Win32+Debug 1.左值的定义 左值是(lvalue)是C++中的一个基本概念.凡是可以出现在赋值运算符左边的表达式都是左值.与左值相对的就是右值(rvalue),凡是可以出现在赋值运算右边的表达式都是右值.左值一定可以作为右值,但反过来不一定成立. 可以给左值下一个定义:值为可寻址的非只读单元的表达式称为左值. 因此,理解左值的概念,需要注意一下几点: (1)左值一定是可以寻址的表达式,不能寻址的表达式不能作为左值.例如,表达式3+5是一个符号常量表达式

表达式左值右值

左值右值是表达式的属性,该属性称为 value category.按该属性分类,每一个表达式属于下列之一: lvalue left value,传统意义上的左值 xvalue expiring value, x值,指通过“右值引用”产生的对象 prvalue pure rvalue,纯右值,传统意义上的右值(?) 而 xvalue 和其他两个类型分别复合,构成: lvalue + xvalue = glvalue general lvalue,泛左值 xvalue + prvalue = rva

[C/C++不常见语法特性]_[初级]_[左值-右值-lvalue-rvalue]

参考:1. http://en.cppreference.com/w/cpp/language/value_category   << Value categories >> 2. https://msdn.microsoft.com/en-us/library/dd293668.aspx   << Rvalue Reference Declarator: && >>3. https://msdn.microsoft.com/en-us/li