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


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


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


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


相关文章
|
18天前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
63 6
|
5月前
|
安全 编译器 程序员
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
104 2
|
8月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
56 3
|
8月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
9月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
92 5
|
9月前
|
C++ 容器
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
118 1
|
9月前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
124 1
|
9月前
|
C++
C++引用
C++引用
|
9月前
|
C++ 容器
【C++】拷贝构造函数、拷贝赋值函数与析构函数
【C++】拷贝构造函数、拷贝赋值函数与析构函数
150 6
|
9月前
|
存储 编译器 C++
【C++】:拷贝构造函数和赋值运算符重载
【C++】:拷贝构造函数和赋值运算符重载
51 1