文章目录
- 一、常量引用语法
- 1、语法简介
- 2、常引用语法示例
- 二、常量引用语法
- 1、int 类型常量引用示例
- 2、结构体类型常量引用示例
在 C++ 语言中 , 常量引用 是 引用类型 的一种 ;
借助 常量引用 , 可以将一个变量引用 作为实参 传递给一个函数形参 , 同时保证该值不会在函数内部被修改 ; 这样既保证了参数传递效率 , 有保证了数据安全 ;
常量引用 的重要使用场景 :
- 函数参数传递
- 函数返回值
- 对象成员
本篇博客会给出 常量引用 的几种案例 ;
一、常量引用语法
1、语法简介
使用 " 普通变量 " 初始化 " 常量引用 " , 就是将 普通变量 赋值给 常量应用 , 也可以理解为 将 变量转为常量 ;
常量引用 语法 :
const T& variable_name = value;
- T 是 常量引用 的类型名称 , 如 : int , string ;
- variable_name 是 常量引用 的名称 , 调用该常量引用 , 不可修改 value 变量的值 ;
- value 是 被引用的 变量 , 调用该变量可以修改变量的值 ;
2、常引用语法示例
常量引用示例 : 下面的代码 , 就是上述 使用 普通变量 初始化 常量引用 :
// 定义变量 a
int a = 10;
// 定义变量 a 的 常量引用 b
const 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()
{
// 定义普通变量 a
int 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 . . .