• 【C++】C++ 引用详解 ⑩ ( 常量引用案例 )



    在 C++ 语言中 , 常量引用 是 引用类型 的一种 ;

    借助 常量引用 , 可以将一个变量引用 作为实参 传递给一个函数形参 , 同时保证该值不会在函数内部被修改 ; 这样既保证了参数传递效率 , 有保证了数据安全 ;

    常量引用 的重要使用场景 :

    • 函数参数传递
    • 函数返回值
    • 对象成员

    本篇博客会给出 常量引用 的几种案例 ;





    一、常量引用语法




    1、语法简介


    使用 " 普通变量 " 初始化 " 常量引用 " , 就是将 普通变量 赋值给 常量应用 , 也可以理解为 将 变量转为常量 ;


    常量引用 语法 :

    const T& variable_name = value;
    
    • 1
    • T 是 常量引用 的类型名称 , 如 : int , string ;
    • variable_name 是 常量引用 的名称 , 调用该常量引用 , 不可修改 value 变量的值 ;
    • value 是 被引用的 变量 , 调用该变量可以修改变量的值 ;

    2、常引用语法示例


    常量引用示例 : 下面的代码 , 就是上述 使用 普通变量 初始化 常量引用 :

    	// 定义变量 a
    	int a = 10;
    
    	// 定义变量 a 的 常量引用 b
    	const int& b = a;
    
    • 1
    • 2
    • 3
    • 4
    • 5




    二、常量引用语法




    1、int 类型常量引用示例


    如果定义 如下函数 , 参数类型为 const int& 类型的常量引用 ,

    // 常量引用作为函数参数  
    void fun(const int& num) {
    	// 在函数中不能修改上述 num 值 
    	printf("fun 函数接收到参数 num = %d\n", num);
    
    	// 如果尝试修改 常量引用 num 值 , 就会在编译时报错
    	num = 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如果尝试修改 常量引用 num 值 , 就会在编译时报错 , 报错信息如下 :

    已启动生成…
    1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
    1>hello_world.cpp
    1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(17,2): error C3892: “num”: 不能给常量赋值
    1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述


    正确代码示例 :

    // 包含 C++ 头文件
    #include "iostream"
    
    // 使用 std 标准命名空间
    //		该命名空间中 , 定义了很多标准定义
    using namespace std;
    
    // 导入 C 头文件
    #include 
    
    // 常量引用作为函数参数  
    void fun(const int& num) {
    	// 在函数中不能修改上述 num 值 
    	printf("fun 函数接收到参数 num = %d\n", num);
    
    	// 如果尝试修改 常量引用 num 值 , 就会在编译时报错
    	//num = 0;
    }
    
    int main()
    {
    	// 定义普通变量 a
    	int a = 10;
    
    	// 向函数中传入 变量 a 作为常量引用参数 
    	// 相当于将 &a 地址传入
    	fun(a);
    
    
    	// 控制台暂停 , 按任意键继续向后执行
    	system("pause");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    执行结果 :

    fun 函数接收到参数 num = 10
    Press any key to continue . . .
    
    • 1
    • 2

    在这里插入图片描述


    2、结构体类型常量引用示例


    定义一个函数 , 接收结构体类 类型的 常量引用 , 则 结构体常量引用 指向的 对象成员不能被修改 ;

    定义的结构体类如下 :

    // 定义一个结构体类型, 之后使用该类型的常量引用进行测试
    struct Student
    {
    	char name[64];
    	int age;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    函数 接收 结构体类型的常量引用 作为参数 , 该参数的成员不可修改 , 如果尝试修改 常量引用 student 成员的值 , 就会在编译时报错 ;

    // 常量引用作为函数参数  
    void fun(const Student& student) {
    	// 在函数中不能修改上述 num 值 
    	printf("fun 函数接收到参数 student = %d\n", student.age);
    
    	// 如果尝试修改 常量引用 student 成员的值 , 就会在编译时报错
    	//student.age = 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述


    正确代码示例 :

    // 包含 C++ 头文件
    #include "iostream"
    
    // 使用 std 标准命名空间
    //		该命名空间中 , 定义了很多标准定义
    using namespace std;
    
    // 导入 C 头文件
    #include 
    
    // 定义一个结构体类型, 之后使用该类型的常量引用进行测试
    struct Student
    {
    	char name[64];
    	int age;
    };
    
    // 常量引用作为函数参数  
    void fun(const Student& student) {
    	// 在函数中不能修改上述 num 值 
    	printf("fun 函数接收到参数 student = %d\n", student.age);
    
    	// 如果尝试修改 常量引用 student 成员的值 , 就会在编译时报错
    	//student.age = 0;
    }
    
    int main()
    {
    	// 定义 Student 类对象
    	Student s;
    	// 设置 Student 对象成员值
    	s.age = 18;
    
    	// 向函数中传入 Student 对象 s 作为 Student 类型的常量引用参数 
    	// 相当于将 &s 地址传入
    	fun(s);
    
    
    	// 控制台暂停 , 按任意键继续向后执行
    	system("pause");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    执行结果 :

    fun 函数接收到参数 student = 18
    Press any key to continue . . .
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    同时显示上下两层凸包特征的可视化程序
    FPGA零基础学习:图像显示系统设计
    创建SpringBoot项目四种方式
    python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析
    回归分析处理
    (十三)【Jmeter】线程(Threads(Users))之tearDown 线程组
    浅谈数据结构之链表
    在 python 中使用 Haar-Cascade 进行人脸检测
    PaddleNLP通用信息抽取模型:UIE【信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练】
    uniapp怎么支持rtsp流监控播放
  • 原文地址:https://blog.csdn.net/han1202012/article/details/132546843