探索c++中引用特性(&)的本质


#【什么是引用】

引用就是给一个变量取别名。

注意:这个引用不会新开辟一块空间,而是和原来的变量公用一块空间。

举个例子:李逵,在家称为"铁牛",江湖上人称"黑旋风"。


#【引用规则】

引用实体类型+&+引用别名 = 引用实体。

int main() {
    int x = 5;
    int& ref = x; // 声明一个引用

    ref = 10; // 修改引用所指向的变量
    cout << x << endl; // 输出: 10

    return 0;
}


#【特性和用途】

特性:

1.引用类型必须是和引用实体是同一类型。

2.引用在定义时必须初始化

3. 引用一旦引用一个实体,就不能引用其他实体。


用途场景:

1.做函数参数

引用在函数参数传递中非常有用,可以通过引用传递参数,从而避免对象的拷贝,提高效率

void increment(int& num) {
    num++; // 修改引用所指向的变量
}

int main() {
    int x = 5;
    int& ref = x; // 声明一个引用

    increment(x); // 传递引用给函数
    cout << x << endl; // 输出: 11

    return 0;
}


2.做函数返回值

函数可以返回引用类型,使得函数返回的结果可以被赋值给一个引用变量,并且可以继续修改这个变量。


番外篇——说说引用和const引用

文章至此本该结束了,但就C++而言,谈到了引用,彷佛天然应该再谈谈指针。因而,在下接着再来简单说说引用和const引用。所谓“简单说说”,是指在下只是作一个简明扼要的介绍,对一些原理和细节不作深刻探讨。为何要在这里说?由于咱们的讲述要会用到上面的概念。另外还要注意,咱们这里只讨论左值引用,即你们所熟悉的通常引用,对于C++11新特性右值引用,不在讨论之列。

1.若是一个引用和一个东西(这里再次使用“东西”这个词)绑定,那么它就永远只能是这个东西的“别名”,不能再说“其余人”的“别名”,即引用自己不能修改。可是,咱们能够经过引用来修改它所引用的东西的值。

2.引用声明时必须同时初始化 ,且必须用左值初始化。(左值:就是能够用&求地址的量,换言之,就是有肯定地址的量,而不是所谓的临时量)

对这些特性你们是否是似曾相识呢?没错,这些特性和“自己是常量的指针”(int* const p)的特性同样。事实上,咱们彻底能够借用“自己是常量的指针”来理解甚至定义引用。

引用是一个指向不可变的、被编译器自动解引用的指针,即,引用是一个被编译器自动解引用的“自己是常量的指针”。

看下面的代码

int a = 10; int &ra = a; ra = 11;

在上面的代码中,编译器将int &ra=a转化为int* const ra=&a,而将ra=11转化为*ra=11,将ra自动转化为*ra的过程,就是上面定义中所说的“自动解引用”。

那么,什么是const引用(即咱们说的常量引用,但我但愿你们称其为const引用而不是常量引用)呢?很显然,const int &ra=a就至关于const int* const ra=&a了。

声明:BenBonBen博客|版权所有,违者必究|如未注明,均为原创

转载:转载请注明原文链接 - 探索c++中引用特性(&)的本质


过去太迟,未来太远,当下最好