当前位置:首页 >风度时尚 > 娱趣

C++中的“引证”

2018-09-25 23:50

引证就是别号,如下,rnum是num的他人,对rnum的操作实践就是对num的操作。这儿的&是引证运算符,不是取址运算符。

int num = 1;int &rnum=num;

还能够界说一个目标的别号,如下,留意不能界说一个类的别号,由于它没有详细的内存地址。

Human Mike;Human &rMike=Mike;

还要留意一点是,界说引证时一定要一起对该引证进行初始化。

函数的参数传递有三种方法:

(1)经过值来传递函数参数

当经过值的方法给函数传递参数时,编译器会主动在栈中创立该参数的仿制,因而,函数处理的是这些副本,一旦函数履行结束,副本就被开释,本来的参数未被修正。

void swap(int a,int b); // 声明swap(a,b); // 调用

(2)经过指针来传递函数参数

当经过指针的方法给函数传递参数时,实践上传递的是参数的内存地址,而无需在栈中创立参数的仿制,因而是对参数本身的参数。

void swap(int *a,int *b); // 声明swap(&a,&b); // 调用

(3)经过引证来传递函数参数

比照于指针的直接拜访,选用引证的方法能够直接拜访内存地址。别的,运用别号的方法传递参数比用指针传递愈加便利和明晰,并且具有指针的功用。

void swap(int &ra,int &rb); // 声明swap(a,b); // 调用

传递目标的方法有四种:

(1)用值来传递目标

假设仅仅是传递变量的话,选用指针或引证这种按址传递方法的优势不是很显着,但假设是传递较大的目标的话,则优势比较显着。这是由于按值方法向函数传递一个目标时,会树立该目标的仿制,而从函数回来一个目标时也要树立被回来目标的仿制。测验代码如下:

#include<iostream>using namespace std;class A;A::A()A::A(A&)A::~A()A func(A one);int main()A func(A one)

输出成果:

履行结构函数创立一个目标履行仿制结构函数创立该目标的副本履行仿制结构函数创立该目标的副本履行析构函数删去该目标履行析构函数删去该目标履行析构函数删去该目标

(2)用指针来传递目标

测验代码如下:

#include<iostream>using namespace std;class A;A::A()A::A(A&)A::~A()A *func(A *one);int main()A *func(A *one)

输出成果:

履行结构函数创立一个目标

(3)用const指针来传递目标

选用指针来传递目标,尽管能够避免调用仿制结构函数和析构函数,但由于它得到了该目标的内存地址,能够随时修正目标的数据,因而它破坏了按值传递的维护机制。假如用const指针来传递目标,就能够避免任何企图对该目标所进行的操作行为,并且确保回来一个不被修正的目标。测验代码如下:

#include<iostream>using namespace std;class A void set(int i)private: int x;};A::A()A::A(A&)A::~A()const A *const func(const A *const one);int main()const A *const func(const A *const one)

输出成果:

履行结构函数创立一个目标99

(4)用引证来传递目标

由于引证不能重新分配去引证另一个目标,它始终是常量。测验代码如下:

#include<iostream>using namespace std;class A void set(int i)private: int x;};A::A()A::A(A&)A::~A()A &func(A &one);int main()A &func(A &one)

输出成果:

履行结构函数创立一个目标99

引证不光完成了指针的功用,并且运用起来愈加便利,那为什么还要指针?由于指针能够为空,但引证不能为空,指针能够被赋值,引证只能够被初始化,不能够被赋为另一个目标的别号。假如想使一个变量记载不同目标的地址,就必须运用指针。要理解的一点是不能够直接用引证来指向堆中新建的空间,引证仅仅个别号,不能够作为指针来运用。如int &r=new int;是过错的。

招聘信息

当前位置:首页 >风度时尚 > 娱趣
此文章提到了
MORE
对象相关阅读
函数相关阅读
指针相关阅读
大家还在看
向你推荐
今日热词
资讯
  • 资讯
  • 妆品
  • 明星
  • 影视