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月前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
40 9
|
1月前
|
存储 安全 编译器
【C++专栏】C++入门 | 函数重载、引用、内联函数
【C++专栏】C++入门 | 函数重载、引用、内联函数
27 0
|
1月前
|
存储 分布式计算 安全
我的C++奇迹之旅:值和引用的本质效率与性能比较2
我的C++奇迹之旅:值和引用的本质效率与性能比较
|
1月前
|
编译器 C++
我的C++奇迹之旅:值和引用的本质效率与性能比较1
我的C++奇迹之旅:值和引用的本质效率与性能比较
|
12天前
|
存储 安全 编译器
【C++入门】缺省参数、函数重载与引用(下)
【C++入门】缺省参数、函数重载与引用
|
2天前
|
编译器 C++ Windows
【C++】vector问题解决(非法的间接寻址,迭代器失效 , memcpy拷贝问题)
不使用memcpy函数不就可以了,然后我们使用简单粗暴的赋值拷贝,这样就不会发生浅拷贝问题了!!!
12 1
|
3天前
|
存储 安全 C++
深入理解C++中的指针与引用
深入理解C++中的指针与引用
5 0
|
4天前
|
设计模式 算法 编译器
【C++入门到精通】特殊类的设计 |只能在堆 ( 栈 ) 上创建对象的类 |禁止拷贝和继承的类 [ C++入门 ]
【C++入门到精通】特殊类的设计 |只能在堆 ( 栈 ) 上创建对象的类 |禁止拷贝和继承的类 [ C++入门 ]
9 0
|
12天前
|
编译器 C++ 索引
【C++类和对象】拷贝构造与赋值运算符重载(下)
【C++类和对象】拷贝构造与赋值运算符重载
|
12天前
|
存储 编译器 C++
【C++类和对象】拷贝构造与赋值运算符重载(上)
【C++类和对象】拷贝构造与赋值运算符重载