c++ 右值左值

左值右值

名词

左值:lvalue,left value

右值:rvalue,right value

C语言

这两个名词是从C语言继承过来的,C语言中为了帮助记忆:左值可以出现在赋值语句的左侧,右值则不能。

C++

  • 在C++语言中,二者的区别就没那么简单了。C++的表达式要不然就是左值,要不然就是右值,不存在黑户。
  • 一个左值表达式的求值结果是一个对象或者一个函数,然而以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象。此外,虽然某些表达式的求值结果是对象,但它们是右值而非左值。
  • 可以做一个简单的归纳:当一个对象被用作右值的时候,用的是对象的值(内容),当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。
  • 知乎看到的经典总结:左值右值的形式区分(或者称语法区分)是能否用取地址&运算符;语义区分(即其本质涵义)在于表达式代表的是持久对象还是临时对象。

原文地址:https://www.cnblogs.com/Yu-900914/p/10036070.html

时间: 2024-10-09 00:24:10

c++ 右值左值的相关文章

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

C++11之右值引用:从左值右值到右值引用

C++98中规定了左值和右值的概念,但是一般程序员不需要理解的过于深入,因为对于C++98,左值和右值的划分一般用处不大,但是到了C++11,它的重要性开始显现出来. C++98标准明确规定: 左值是可以取得内存地址的变量. 非左值即为右值. 从这里可以看出,可以执行&取地址的就是左值,其他的就是右值. 这里需要明确一点,能否被赋值不是区分C++左值和右值的区别. 我们给出四个表达式: string one("one"); const string two("two&

[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

C++ 11中的左值引用和右值引用

1.首先区分左值和右值    左值是表达式结束后依然存在的持久对象    右值是表达式结束时就不再存在的临时对象    便捷方法:对表达式取地址,如果能,则为左值,否则为右值举例:    int a = 10    int b = 20    int *pFlag = &a    vector<int> vctTemp    vctTemp.push_back(1)    string str1 = "hello"    string str2 = "wo

左值与右值引用 详解

说明 顾明思议 左值引用 就是对左值的引用 就是给左值取别名 右值引用 就是对右值的引用 就是给右值取别名 当改变别名是 该值也相应的改变 那么 何以区分哪些是左值哪些是右值呢? 左值 右值 在内存中有特定地址的量 在寄存器中的量 因为申请的变量会在内存中开辟一块地址 左值也叫有特定地址的量 比如: int a=10; //a 是左值 double b=1.3; //b 是左值 左值引用 int & Ta=a; //引用左值 故 是一个左值引用 double & Tb=b; //引用左值

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&

(C++)关于i++和i++的左值、右值问题

1.什么是左值和右值? 左值就是出现在表达式左边的值(等号左边),可以被改变,他是存储数据值的那块内存的地址,也称为变量的地址: 右值是指存储在某内存地址中的数据,也称为变量的数据. 左值可以作为右值,但右值不可以是左值. 因此也只有左值才能被取地址. 2.举两个问题: int i = 0; (i++)+=i; //错误 (++i)+=i; //正确 int *ip = &(i++); //错误 int *ip = &(++i); //正确 3.为什么i++不能作左值? 我们来看i++和i

C语言 左值、右值

左值就是在赋值中可以放在赋值操作符两边的值 右值则是只可以放在赋值操作符右边的值 ++i是直接给i变量加1,然后返回i本身,因为i是变量,所以可以被赋值,因此是左值表达式i++现产生一个临时变量,记录i的值,而后给i加1,接着返回临时变量,然后临时变量不存在了,所以,不能再被赋值,因此是右值表达式

左值右值

左值就是可以放在赋值号左边赋值的,必须要在内存有实体 右值就是可以放在赋值号右边取出值赋给其他变量的值,可以在内存,也可以在CPU 引用说明为对象建立引用名,即别名 引用在定义初始化时与对象名绑定,程序中不能对引用重定义 一个对象的别名,从使用方式和效果上,与使用对象名一致 定义形式:类型&引用名=对象名; //引用可以改变指针的指向 //引用可以改变指针指向的值 1 #include <iostream> 2 using namespace std; 3 4 void main()