C++引用(左值引用)

1. 相关概念

  C++引用分两种:lvalue reference(左值引用)和rvalue reference(右值引用)。本文讨论的是lvalue reference(左值引用)。

1.1 lvalue(左值)和rvalue(右值)

  在讨论C++引用之前,我们需要先搞清楚两个概念:lvalue(左值)和rvalue(右值)。

  lvalue(左值)和rvalue(右值)是对每个C++表达式值类别的区分。

  一个表达式的值类别是左值,那么这个表达式有两点性质:1)可以放在赋值运算符‘=‘的左边;2)可以用取地址运算符‘&‘取地址。

  对象(内嵌类型定义的变量,复合类型定义的变量(指针,数组),类类型定义的对象)是左值表达式。

2. 左值引用

  引用是对象的一个别名,引用本身不是一个对象。

  也就是说,

    1)我们对引用的操作就是对对象的操作(基本的算术运算)。可以理解为通过引用和通过对象对内存内容的操作是透明的,一方改变内存内容,另一方是可见的。

    2)引用只能指向对象,不能指向常量或者表达式。

  由于引用本身不是一个对象,因此不存在引用的引用。

  引用的声明

  Type &r = object;

    1)引用在声明的时候就必须初始化,且初始化时引用的类型和对象的类型必须相等,否则编译时报错;

    2)一旦引用了一个对象,就不能再引用另一个对象;

    3)对引用或者对象重新进行赋值时,赋值号两边的类型可以不同,但会产生截断。

原文地址:https://www.cnblogs.com/GunW/p/11402722.html

时间: 2024-10-09 20:33:04

C++引用(左值引用)的相关文章

左值引用,右值引用以及移动语义

1.左值引用 左值引用的基本语法 Type &引用名 = 左值表达式; #include <iostream> using namespace std; int main() { int a = 10; //ra是a的引用(别名),相当于把ra与a绑定. int &ra(a); cout << ra << " " << (void*)&ra << " " << (void

左值引用和右值引用

1.左值和右值的概念 左值是可以放在赋值号左边可以被赋值的值:左值必须要在内存中有实体:         右值当在赋值号右边取出值赋给其他变量的值:右值可以在内存也可以在CPU寄存器.         一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址. 2.引用 引用是C++语法做的优化,引用的本质还是靠指针来实现的.引用相当于变量的别名. 引用可以改变指针的指向,还可以改变指针所指向的值. 引用的基本规则: 声明引用的时候必须初始化,且一旦绑定,不可把引用绑定到其他

左值、左值引用、右值、右值引用

1.左值和右值的概念 左值是可以放在赋值号左边可以被赋值的值:左值必须要在内存中有实体:         右值当在赋值号右边取出值赋给其他变量的值:右值可以在内存也可以在CPU寄存器.         一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址. 2.引用 引用是C++语法做的优化,引用的本质还是靠指针来实现的.引用相当于变量的别名. 引用可以改变指针的指向,还可以改变指针所指向的值. 引用的基本规则: 声明引用的时候必须初始化,且一旦绑定,不可把引用绑定到其他

C++左值引用和右值引用

1. 左值:一般指的是可以取地址.有名字的.反之就是右值. 2. 标准上来说,赋值运算符返回的是lvalue refering to left operand,即左值引用. 3. cosnt int & i = 1;合法,但是int& i = 1;不合法,因为右值不可以绑定到一个引用上,但是可以绑定到const 引用上. 事实上也很好理解,我们肯定不能修改字面值1,因为它就是固定的值1,因而也必须绑定到const 引用上.

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

C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward

这篇文章要介绍的内容和标题一致,关于C++ 11中的这几个特性网上介绍的文章很多,看了一些之后想把几个比较关键的点总结记录一下,文章比较长.给出了很多代码示例,都是编译运行测试过的,希望能用这些帮助理解C++ 11中这些比较重要的特性. 关于左值和右值的定义 左值和右值在C中就存在,不过存在感不高,在C++尤其是C++11中这两个概念比较重要,左值就是有名字的变量(对象),可以被赋值,可以在多条语句中使用,而右值呢,就是临时变量(对象),没有名字,只能在一条语句中出现,不能被赋值. 在 C++1

深入学习c++--左值引用和右值引用

#include <iostream> #include <string> #include <vector> using namespace std; int main() { int t = 10; //t: 左值 int t2 = t + 1; //t: 右值 int a = 1; const int &b = a + 1; // 左值引用 // int &b = a + 1; // 错误 cout << b << &quo

[转]C++11 左值、右值、右值引用详解

https://blog.csdn.net/hyman_yx/article/details/52044632 左值.右值 在C++11中所有的值必属于左值.右值两者之一,右值又可以细分为纯右值.将亡值.在C++11中可以取地址的.有名字的就是左值,反之,不能取地址的.没有名字的就是右值(将亡值或纯右值).举个例子,int a = b+c, a 就是左值,其有变量名为a,通过&a可以获取该变量的地址:表达式b+c.函数int func()的返回值是右值,在其被赋值给某一变量前,我们不能通过变量名

[C++]右值引用和转移语义

右值引用和转移语义 本文尝试着解释何为右值引用和转移语义以及使用它们具有优势,并提供相关案例分析. 定义 左值和右值 首先我们先来理解一下什么是左值和右值. C/C++语言中可以放在赋值符号左边的变量,左值表示存储在计算机内存的对象,左值相当于地址值.右值:当一个符号或者常量放在操作符右边的时候,计算机就读取他们的"右值",也就是其代表的真实值,右值相当于数据值. C/C++语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量.左值表示存