文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

什么是C++引用

2023-06-25 12:26

关注

这篇文章主要介绍“什么是C++引用”,在日常操作中,相信很多人在什么是C++引用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是C++引用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、C++ 引用

变量名,本身是一段内存的引用,即别名(alias)。此处引入的引用,是为己有变量起一个别名。

声明如下

int main(){int a;int &b = a;}

1.规则

引用没有定义,是一种关系型声明。声明它和原有某一变量的关系。类型与原有类型保持一致,且不分配内存。与被引用的变量有相同的地址。

声明的时候必须初始化,一经声明,不可变更。

可对引用,再次引用。多次引用的结果,是某一个变量具有多个别名。

&符号前面有数据类型时,是引用。其他均为取地址。

#include <iostream>using namespace std;int main(){int a,b;int &r = a;int &r = b; //错误,不可更改原有的引用关系float &rr = b; //错误,引用类型不匹配cout<<&a<<&r<<endl; //变量与引用具有相同的地址。int &ra = r; //可对引用更次引用,表示 a 变量有两个别名,分别是 r 和 ra}

什么是C++引用

2.应用

值作函数参数

void swap(int a, int b); //无法实现两数据的交换void swap(int *p, int *q); //开辟了两个指针空间实现交换

引用作函数参数

#include <iostream>using namespace std;void swap(int &a, int &b){int tmp;tmp = a;a = b;b = tmp;}int main(){int a = 3,b = 5;cout<<"a = "<<a<<"b = "<<b<<endl;swap(a,b);cout<<"a = "<<a<<"b = "<<b<<endl;return 0;}

什么是C++引用

c++中引入引用后,可以用引用解决的问题。避免用指针来解决。

3.引用提高

引用的本质是指针,C++对裸露的内存地址(指针)作了一次包装。又取得指针的优良特性。所以再对引用取地址,建立引用的指针没有意义

1.可以定义指针的引用,但不能定义引用的引用。
int a;int* p = &a;int*& rp = p; // okint& r = a;int&& rr = r;//error

例子:

#include <iostream>using namespace std;void swap(char *pa,char *pb){char *t;t=pa;pa=pb;pb=t;}void swap2(char **pa,char **pb){char *t;t=*pa;*pa=*pb;*pb=t;}void swap3(char *&pa,char *&pb)//指针的引用{char *t;t=pa;pa=pb;pb=t;}int main(){char *pa="china";char *pb="america";cout<<"pa"<<pa<<endl;cout<<"pb"<<pb<<endl;//swap(pa,pb);//swap2(&pa,&pb);swap3(pa,pb);cout<<"pa"<<pa<<endl;cout<<"pb"<<pb<<endl;return 0;}

什么是C++引用

2.可以定义指针的指针,不能定义引用的指针。
int a;int* p = &a;int** pp = &p; // okint& r = a;int&* pr = &r; // error
3.可以定义指针数组,但不能定义引用数组,可以定义数组引用。
int a, b, c;int* parr[] = {&a, &b, &c}; // okint& rarr[] = {a, b, c}; // errorint arr[] = {1, 2, 3};int (&rarr)[3] = arr; // ok
4.常引用

const 引用有较多使用。它可以防止对象的值被随意修改。因而具有一些特性。

(1)const 对象的引用必须是 const 的,将普通引用绑定到 const 对象是不合法的。

这个原因比较简单。既然对象是 const 的,表示不能被修改,引用当然也不能修改,必须使用 const 引用。实际上,const int a=1; int &b=a;这种写法是不合法的,编译不过。

(2)const 引用可使用相关类型的对象(常量,非同类型的变量或表达式)初始化。

这个是const 引用与普通引用最大的区别。const int &a=2;是合法的。double x=3.14; const int&b=x;也是合法的。

4.常引用原理

const 引用的目的是,禁止通过修改引用值来改变被引用的对象。const 引用的初始化特性较为微妙,可通过如下代码说明

double val = 3.14;const int &ref = val; // int const & int & const ??double & ref2 = val;cout<<ref<<" "<<ref2<<endl;val = 4.14;cout<<ref<<" "<<ref2<<endl;

上述输出结果为 3 3.14 和 3 4.14。因为 ref 是 const 的,在初始化的过程中已经给定值,不允许修改。而被引用的对象是 val,是非 const 的,所以 val 的修改并未影响 ref 的值,而 ref2 的值发生了相应的改变。

那么,为什么非 const 的引用不能使用相关类型初始化呢?实际上,const 引用使用相关类型对象初始化时发生了如下过程:

int temp = val;const int &ref = temp;

如果 ref 不是 const 的,那么改变 ref 值,修改的是 temp,而不是 val。期望对 ref 的赋值会修改 val 的程序员会发现 val 实际并未修改。

int i=5;const int & ref = i+5;//此时产生了与表达式等值的无名的临时变量,//此时的引用是对无名的临时变量的引用。故不能更改。cout<<ref<<endl;

5.const的好处

1,使用 const 可以避免无意修改数据的编程错误。

2,使用 const 可以处理 const 和非 const 实参。否则将只能接受非 const 数据。

3,使用 const 引用,可使函数能够正确的生成并使用临时变量(如果实参与引用参数不匹配,就会生成临时变量)

6.引用的本质浅析

大小与不可再引用

struct TypeP{char *p;};struct TypeC{char c;};struct TypeR{char& r; //把引用单列出来,不与具体的对象发生关系};int main(){printf("%d %d %d\n",sizeof(TypeP),sizeof(TypeC),sizeof(TypeR));return 0;}

什么是C++引用

结论:引用的本质是,是对常指针 type * const p 的再次包装。

1、const int *pi                                   指向常量的指针。2、int * const pi                                  指针本身是一个常量,称为“指针常量”、“常指针”。3、const int * const pi                       指向常量的指针常量。

到此,关于“什么是C++引用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯