【C++】 引用学习

    xiaoxiao2025-04-17  37

    1.什么是引用

        引用是为对象起的另外一个名字,定义的格式为: 类型 &引用变量名 = 已定义过的变量名。例如: int a=10; int &b=a; //b是a的引用

    2.引用的特点

     1>一个变量可取多个别名  2> 引用必须初始化   3>引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。     定义引用时,程序会把引用的它的初始值绑定在一起,一旦初始化,引用将和它的初始值对象一直绑定在一起,所以无法再引用其他变量,且必须初始化。

    3.几种特殊的引用

    1>引用一个引用变量

        实际上相当于给别名再次起了一个别名

    2>const引用

        被const修饰的引用相当于一个常量 void Test () { int d1 = 4; const int & d2 = d1; d1 = 5; // d1改变 d2的值也会改变。 //d2 = 6; // 错误。不能给常量(不能被修改的量)赋值 }    有且只有被const修饰的引用可以引用一个常量 void test() { const int & d= 5; // 常量具有常性,只有常引用可以引用常量 }  被const 修饰的 int类型的引用可以引用一个double类型的数据,但是会丢失数据。如果不用const修饰,则编译器会报错。 void test() { double d7 = 1.1; //int& d8 = d7; //错误,d7是double类型,d8是int,d7赋值给 d8时要生成一个临时变量,也就是说d8引用的是这个带有常性的临时变量,所以不能赋值。 const int& d9 = d7; }

    3>引用作为参数

        引用作为函数参数可以直接在函数内部改掉传进来的实参的值,非常方便。      void Swap (int& left, int& right) { int temp = left; right = left ; left = temp ; } //通过引用改掉了传进来的实参值     如果不希望改掉实参的值,尽量使用常引用传参

    4>引用作为返回值

        引用作为返回值时,一定要注意不能返回临时变量的引用。临时变量的引用在返回时,系统会将临时变量的地址放到寄存器中(感兴趣为什么是这样的话可以尝试看一下对应的汇编代码),所以相当于返回了临时变量的地址,如果那块空间没有被占用的话结果是对的,但这只是一种侥幸正确的情况,一旦空间被占用,结果将变成一个随机值。

    <span style="font-weight: normal;"><span style="font-size:10px;">#include<iostream> using namespace std; int& Add(int d1, int d2) { int ret = d1 + d2; return ret; } void main() { int a = 3, b = 4; int c = Add(a, b); cout << "c:" << c << endl; //结果虽然正确,实际上已经发生了错误。 }</span></span> 总结:

        学习引用,我们会发现,它貌似和指针很相似,那么它和指针有哪些区别呢?   1>引用只能在定义时初始化一次,之后不能改变指向其它变量(从一而终);指针变量的值可变。    2> 引用必须指向有效的变量,指针可以为空。   3>sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。    4> 指针和引用自增(++)自减(--)意义不一样。   5> 相对而言,引用比指针更安全。 指针比引用更灵活,但是也更危险。
    转载请注明原文地址: https://ju.6miu.com/read-1298178.html
    最新回复(0)