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


在 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 . . .

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/132546843
今日推荐