C++中 引用 和 const

来源:互联网 发布:澳门网络博客 编辑:程序博客网 时间:2024/05/16 08:00

在C++中,引用是给已经存在的变量取一个别名,引用既可以传值也可以达到指针的效果,它和它的引用的变量共用同一块内存空间。

1.引用

定义的格式为:
类型 &引⽤变量名 = 已定义过的变量名;

int a=10;//定义一个整型变量int &ra=a;//&为引用标志,ra与a类型必须一样

数组的引用

int a[10];int(&ra)[10]=a;

引⽤的性质:
1. ⼀个变量可取多个别名
2. 引⽤必须初始化
3. 引⽤只能在初始化的时候引⽤⼀次,不能改变为再引⽤其他的变量。

2.const引用 (常引用)

void Test (){ int d1 = 4; const int & d2 = d1; d1 = 5; // d1改变 d2的值也会改变。 //d2 = 6; // 不能给常量(不能被修改的量)赋值 const int d3 = 1; //int&d5 = d3; //d1不能被修改,d5可以去修改d3的值,所以错误 const int & d6 = d3;  // 常量具有常性,只有常引用可以引用常量 double d7 = 1.1; //int& d8 = d7; //类型不同,不能引用。 const int& d9 = d7; //加const,d9=1,因为生成了临时变量,但是不是引用,d9和d7地址不同}

3.引用做引用传参和返回值

引用作为参数
1.【值传递】如果形参为⾮引⽤的传值⽅式,则⽣成局部临时变量接收实参的值

void Swap (int left, int right) // 这能实现交换吗?{ int temp = left; left = right ; right = temp ;}

优点:不会影响实参
缺点:无法通过修改参数改实参

2.【引⽤传递】如果形参为引⽤类型,则形参是实参的别名。

void Swap (int& left, int& right)//形参是外部实参的别名{ int temp = left; right = left ; left = temp ;}

3.【指针传递】

void Swap (int* pLeft, int* pRight){ int temp = *pLeft; *pLeft = *pRight; *pRight = temp;}

优点:可以通过参数改参数
缺点:指针选错容易出错

引用做返回值

1. 不要返回一个临时变量的引用。2. 如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更有效。

4.对比指针和引用

引⽤和指针的区别和联系(注意笔试的时候⾮常喜欢考这个知识点)
1. 引用在定义时必须初始化,指针无要求
2. 一旦一个引用被初始化为指向一个对象,就不能再指向其他对象;
指针可以在任何时候指向任何一个同类型对象。
3. 没有NULL引用,但有NULL指针。
4. 在sizeof中含义不同:引用结果为引用类型大小;但是指针始终是地址空间所占的字节数;(32位平台下为4个字节,64位平台下为8个字节。)
5. 引用自加改变变量内容,指针自加改变指针指向下一个类型的大小。
6. 有多级指针,但无多级引用。
7. 引用比指针使用起来安全。

总结⼀下: 指针⽐引⽤更灵活,但是也更危险。使⽤指针时⼀定要注意检查指针是否为空。指 针所指的地址释放以后最好置0,否则可能存在野指针问题。