当前位置: 首页 > news >正文

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

文章目录

  • 一、常量引用语法
    • 1、语法简介
    • 2、常引用语法示例
  • 二、常量引用语法
    • 1、int 类型常量引用示例
    • 2、结构体类型常量引用示例


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

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

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

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

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





一、常量引用语法




1、语法简介


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


常量引用 语法 :

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

2、常引用语法示例


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

	// 定义变量 aint a = 10;// 定义变量 a 的 常量引用 bconst int& b = a;




二、常量引用语法




1、int 类型常量引用示例


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

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

如果尝试修改 常量引用 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==========

在这里插入图片描述


正确代码示例 :

// 包含 C++ 头文件
#include "iostream"// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;// 导入 C 头文件
#include <stdio.h>// 常量引用作为函数参数  
void fun(const int& num) {// 在函数中不能修改上述 num 值 printf("fun 函数接收到参数 num = %d\n", num);// 如果尝试修改 常量引用 num 值 , 就会在编译时报错//num = 0;
}int main()
{// 定义普通变量 aint a = 10;// 向函数中传入 变量 a 作为常量引用参数 // 相当于将 &a 地址传入fun(a);// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
}

执行结果 :

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

在这里插入图片描述


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


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

定义的结构体类如下 :

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

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

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

在这里插入图片描述


正确代码示例 :

// 包含 C++ 头文件
#include "iostream"// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;// 导入 C 头文件
#include <stdio.h>// 定义一个结构体类型, 之后使用该类型的常量引用进行测试
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;
}

执行结果 :

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

在这里插入图片描述

http://www.lryc.cn/news/149376.html

相关文章:

  • React原理 - React Reconciliation-下
  • YOLOv8超参数调优教程! 使用Ray Tune进行高效的超参数调优!
  • JVM运行时数据区
  • 第七章,相似矩阵及其应用,3-二次型、合同矩阵与合同变换
  • css学习7(盒子模型)
  • C++笔记之临时变量与临时对象与匿名对象
  • 缓存技术(缓存穿透,缓存雪崩,缓存击穿)
  • 实操教程 | 触发器实现 Apache DolphinScheduler 失败钉钉自动告警
  • 以“迅”防“汛”!5G视频快线筑牢防汛“安全堤”
  • jmeter 性能测试工具的使用(Web性能测试)
  • springboot整合第三方技术邮件系统
  • Python入门学习——Day2-变量和数据类型
  • Graylog 更改显示的时区(Display timezone)
  • 【网络安全防护】上海道宁与Bitdefender帮助您构建弹性网络并降低安全运营成本
  • 文心一言 VS CHATGPT
  • 2023-09-01力扣每日一题
  • 【Python】从入门到上头— IO编程(8)
  • R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享...
  • LeetCode 刷题第四轮 Offer I + 类型题
  • LabVIEW计算测量路径输出端随机变量的概率分布密度
  • [C++ 网络协议] 多进程服务器端
  • 李宏毅 2022机器学习 HW2 strong baseline 上分路线
  • 伦敦银交易时间怎么选择?
  • 解决FreeRTOS程序跑不起来,打印调试却提示“Error:..\FreeRTOS\port\RVDS\ARM_CM3\port.c,244“的方法
  • Python序列类型
  • 【python爬虫】5.爬虫实操(歌词爬取)
  • 浅探Android 逆向前景趋势~
  • 国际音标学习笔记
  • Azure - AzCopy学习
  • 解决无法远程连接MySQL服务的问题