C++引用的妙用

一、引用的概念

引用是C++中的一种数据类型,它相当于给变量起了个别名。引用的声明类似于指针,但是引用与指针有两个显著的不同点:

  1. 引用必须被初始化
  2. 引用不可以为NULL

除此之外,引用与指针的功能类似,可以作为函数参数、返回值和变量。

#include <iostream>

int main() {
    int a = 10;
    int& b = a; // 定义b为a的引用
    b++;
    std::cout << "a = " << a << std::endl; // 输出 a = 11
    return 0;
}

在上面的代码中,b是a的引用,对b的改变会直接影响到a。

二、函数参数中的引用

函数参数中传递引用,可以避免拷贝大数据结构带来的时间和空间上的浪费。

#include <iostream>
#include <vector>

void add_10(std::vector<int>& vec) { // 使用引用传递vector
    for(auto& i : vec) { // 使用引用遍历vector
        i += 10;
    }
}

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    add_10(vec);
    for(const auto& i : vec) { // 使用const引用遍历vector
        std::cout << i << " "; // 输出 11 12 13 14 15
    }
    return 0;
}

在上面的代码中,add_10函数使用引用传递vector,add_10内部对vector的修改会直接影响到函数外部传入的vector。

三、返回值中的引用

函数返回引用,效率高,可以直接修改被返回的变量。

#include <iostream>

int& max(int& a, int& b) { // 返回引用类型
    return a > b ? a : b;
}

int main() {
    int a = 10, b = 20;
    max(a, b) = 100; // 直接修改被返回的变量
    std::cout << "a = " << a << ", b = " << b << std::endl; // 输出 a = 10, b = 100
    return 0;
}

在上面的代码中,max函数返回a和b中较大的一个,使用max(a, b) = 100直接修改被返回的变量b的值。

四、引用的实现原理

引用的实现原理是编译器为每个引用变量创建一个指针变量,这个指针变量指向其所表示的变量。

#include <iostream>

int main() {
    int a = 10;
    int& b = a; // 定义b为a的引用
    int* p = &a; // 定义p为a的地址

    std::cout << "a = " << a << std::endl;
    std::cout << "b = " << b << std::endl;
    std::cout << "*p = " << *p << std::endl;

    b = 20; // 修改b的值,a也会被修改
    std::cout << "a = " << a << std::endl;
    std::cout << "b = " << b << std::endl;
    std::cout << "*p = " << *p << std::endl;
    return 0;
}

在上面的代码中,使用指针p修改a的值,b也会被修改,因为b实际上是指向a的指针。

五、小结

引用是C++中非常重要的一种数据类型,它可以避免无谓的拷贝,提高程序效率,更重要的是提高了程序可读性。

引用可以被用于函数参数和返回值中,引用的内部实现是编译器为每个引用变量创建一个指针变量。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/200767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-05 20:03
下一篇 2024-12-06 11:28

相关推荐

  • CSS下一个兄弟元素的妙用

    一、优雅地选择元素 CSS下一个兄弟元素指的是选中当前元素之后的兄弟元素。当我们需要执行某些动态样式效果时,利用该选择器可以更加优雅地选择元素。 /*选中id为wrapper之后的…

    编程 2025-02-17
  • Python字典values的妙用:从获取数据到操作元素

    一、获取所有values 获取字典的所有values十分简单,只需要使用字典的values()方法即可。 a_dict = {‘a’: 1, ‘b’: 2, ‘c’: 3} val…

    编程 2025-01-14
  • Python字典的妙用——实现数据的快速读取和操作

    一、字典基础知识 Python字典是一种可变容器模型,可以存储任意数量的Python对象,每个对象都是通过一个唯一的键来进行访问。字典的本质是一个哈希表,键值对存储在其中。因为其内…

    编程 2025-01-07
  • Python中elif in的妙用

    一、基本用法 在Python中,elif in是一种特殊的语法,用于检查一个变量是否包含在一个列表或元组中,代码示例: colors = [‘red’, ‘blue’, ‘gree…

    编程 2025-01-03
  • Python控制语句:elif的妙用

    Python是一门易学易用的编程语言,它拥有非常强大的控制语句,其中之一就是elif语句。elif语句是if语句的衍生,它可以让代码更加简洁高效。 一、elif语句的作用 当if语…

    编程 2025-01-02
  • 优雅退出:Python break语句的妙用

    一、break语句的基本使用 Python中的break语句用于在循环中提前跳出,结束当前循环。它可以用于for循环和while循环,语法如下: for 变量 in 序列: if …

    编程 2024-12-26
  • 函数重载的妙用

    一、什么是函数重载 在C++中,函数重载是指在同一作用域内,函数名称相同而参数列表不同的情况下,编译器会自动根据不同的参数类型和个数进行区分,生成不同的函数。 例如下面是两个同名函…

    编程 2024-12-23
  • Python字典操作利器:dict.get的妙用

    Python中的字典是一种非常重要的数据结构,它提供了一种键值对的映射关系。在实际应用中,我们常常需要根据键来查询对应的值。读者对字典的get()方法可能比较熟悉,但可能并不知道g…

    编程 2024-12-22
  • 结束循环:Python中的break语句的妙用

    一、break语句的基本用法 在编写Python程序时,我们经常需要对循环进行控制。break语句可以在循环体内提前结束循环,即跳出循环体。 # 示例代码1 for i in ra…

    编程 2024-12-22
  • 解密:注册中心的妙用

    一、注册中心是什么 注册中心是一个分布式系统中的关键组成部分,它可以统一管理服务的注册与发现,用于解决分布式系统中服务间的相互调用问题。通过中心化管理,可以对服务的注册和下线进行管…

    编程 2024-12-21

发表回复

登录后才能评论