C++的引用 拷贝赋值和引用赋值

简介: C++的引用 拷贝赋值和引用赋值

引用


引用的基本概念


引用是C++里面才有的概念。引用并不是定义了一个新的变量,它只是为一个现存变量起的别名。


例如:


int i=1;
int &k=i;

k就是i的一个别名。


定义引用需要注意的地方:


  1. 一旦初始化完成,引用会和初始值变量一直绑定在一起,无法重新绑定到另一个变量,因此引用必须初始化。
  2. 引用的类型要和与之绑定的变量相匹配。
  3. 引用只能绑定在变量上。
  4. 不能定义引用的引用。

来看几个错误的例子巩固一下:


int i = 2;
int& j;//错误,没有初始化
double& k = i;//错误,类型不一样
int& n = 3;//引用类型的初始值必须是一个变量,不能是字面值常量
int& o = i;//正确
int& p = o;//错误,不能定义引用的引用

但是可以在一条语句中定义多个引用。例如:


int i=2;
int &j=i,&k=i;


拷贝赋值和引用赋值


其实就类似于传值和传址的区别。


下面来具体看两个代码:


#include<bits/stdc++.h>
using namespace std;
using gg = long long;
int main()
{
  gg i = 1;//定义了变量i,并用1初始化
  gg j = i;//将变量i的值拷贝赋值给j
  j = 2;
  cout << "i = " << i << ",j = " << j;
  return 0;
}


运行结果:


aa8532b0c58b74c9dfe0ff04b76f96e2_489f363c3e134416a83c28f603bc7e78.png


#include<bits/stdc++.h>
using namespace std;
using gg = long long;
int main()
{
  gg i = 1;//定义了变量i,并用1初始化
  gg &j = i;//将变量i的值拷贝赋值给j
  j = 2;
  cout << "i = " << i << ",j = " << j;
  return 0;
}

运行结果:


01b3bc343797898ab16226fca07c387a_c5c6a51fd1344455b7c7b1e00579a984.png


第一个是拷贝赋值,第二个是引用赋值。


总之一句话,引用即别名。


引用并没有创建一个新的变量,只是对原有的变量起了一个新的名字。


相关文章
|
1月前
|
安全 编译器 程序员
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
46 2
|
4月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
32 3
|
4月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
5月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
66 5
|
5月前
|
C++ 容器
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
|
5月前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
|
5月前
|
C++
C++引用
C++引用
|
5月前
|
C++ 容器
【C++】拷贝构造函数、拷贝赋值函数与析构函数
【C++】拷贝构造函数、拷贝赋值函数与析构函数
116 6
|
5月前
|
存储 编译器 C++
【C++】:拷贝构造函数和赋值运算符重载
【C++】:拷贝构造函数和赋值运算符重载
30 1