首页 > 编程语言 >C++温故补缺(一):引用类型

C++温故补缺(一):引用类型

时间:2023-03-20 23:26:50浏览次数:61  
标签:10 右值 int 左值 C++ 引用 补缺 温故

引用类型

c++增加引用类型的概念,定义方法int &b=a;表示引用类型,引用类型相当于变量的别名,地位和被引用的变量相同,int &b=a;,执行后,变量a和b有相同的值和地址,相当于一个地址的内容有两个标签

必须在定义时用,如果在定义后,int b;&b=a就不是引用了,而是取地址

类似于指针的定义和取内容,int *p;定义指针,*p取指针p的内容

C++引用和指针

  • 不存在空引用。引用必须连接到一块合法的内存。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。

左值、右值与引用

参考:C语言中文网.

C++的左值和右值是从C语言继承过来的,左值的英文简写是"lvalue",右值是"rvalue"。但是他们并不是"left"和"right"。左值的本意是"loactor value",即"可定位的值",也就是存储在内存中、有明确的存储地址的数据,或者说可寻址的数据。而右值"read value",指仅提供数值的数据,不一定可以寻址,如存储在寄存器中的数据。

通常,简单区分左值右值就看赋值号(=)的左右侧,能放在左侧的就是左值,能放在右侧的是右值。所以就有既能做左值又能做右值的。

如:

int a=1;
int b=a;

变量a仅能放在左边,也能放右边,而数值1只能放右边,就是右值。

另外一个例子:const修饰的类型不能再修改值,本质就是不能做左值了。

右值引用[C++ 11新增]

在C++98/03中,就有引用,用‘&’表示,但是不能对数值引用只能引用定义好的变量。

int a=10;
int &b=a;
//int &c=10;  不能这么用

但是可以给常量左值引用赋数值

const int &a=10;

因为const关键字把locator value变成read value,所以可以将数值赋给常量左值引用

C++ 11中添加新的引用方式:右值引用,用“&&”表示

右值引用也必须定义时初始化,但右值引用初始化不能是左值,只能是右值。

int &&a=10;
//int b=1; int &&a=b;  是不行的

右值引用,用别名更容易理解,int &&a=10;,是给数值10起个别名叫做a。而且,a的值是可以修改的。

意义:主要用于移动构造函数,避免不必要的深拷贝,提高程序运行效率。

标签:10,右值,int,左值,C++,引用,补缺,温故
From: https://www.cnblogs.com/Tenerome/p/cppreview1.html

相关文章

  • C++温故补缺(五):移动构造函数
    移动构造函数[C11新增]参考:知乎:C++11右值引用和移动构造函数详解.知乎:什么是POD数据类型.C++11之前,对象的拷贝由三个函数决定:拷贝构造函数,拷贝赋值运算符和析构函数......
  • C++温故补缺(四):构造函数和复制构造函数
    构造函数和复制构造函数构造函数对于需要传值的构造函数,如classbox{protected:intX;intY;intZ;public:box(int,in......
  • C++温故补缺(三):基本输入输出
    基本输入输出输出:cout<<输入:cin>>错误:cerr<<日志:clog<<在功能和调用上,cout,cerr和clog看上去无差别,cerr对象是非缓冲的,每个流插入到cerr后会立即输出,而clog......
  • C++温故补缺(二):lambda函数
    Lambda函数参考:CSDNC++11开始,提供了对匿名函数的支持,成为Lambda函数(表达式)通常,lambda函数用于封装传递给算法或异步方法的几行代码,对应不需要复用,且短小的函数,......
  • C++温故补缺(九):C++多态
    C++多态继承和派生当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态如:shape类被派生为两个类:Rectangle和Triangle#include<iostream>usingnamespacestd......
  • C++温故补缺(八):运算符重载和函数重载
    运算符重载和函数重载重载是c++多态性的一大体现,重载运算符是给运算符添加新的定义,使之前不能运算的对象变得可运算,且一般和运算符的意义相似.函数重载主要是同名函数......
  • C++温故补缺(七):;类的访问控制和继承
    类的访问控制和继承类的静态成员类的静态成员用关键字static修饰,类似静态变量或静态函数,也是有共享的概念类的静态变量:静态变量在类的所有对象中共享,不能再类的定......
  • C++温故补缺(六):友元函数、内联函数和this指针
    友元函数、内联函数和this指针友元函数友元函数是定义在类的外部,但有权访问类的所有私有(private)和保护(protectd)成员.友元函数的原型在类的定义中出现,但它并不是类......
  • C++温故补缺(十五):多线程
    多线程参考:CSDN,知乎传统C++(C++11之前)中并没有引入线程的概念,如果想要在C++中实现多线程,需要借助操作系统平台提供的API,如Linux的<pthread.h>,或windows下的<windows.......
  • C++温故补缺(十四):信号处理
    信号处理信号是由操作系统传给进程的中断,能够提前终止一个程序。在Unix,Linux,MacOS或Windows系统上,都可以通过Ctrl+C产生中断。下面是可以在程序中被捕获的信号,并且可......