一、普通引用




1、概念说明


之前的 【C++】C++ 引用详解 ① ~ ⑦ 博客中 , 讲解的都是 普通引用 , 也就是 将 普通变量 赋值给 引用 , 过程如下 : 先定义 普通变量 a , 然后定义 已存在变量 a 的引用 b ;

这里的 引用 b 就是 普通引用 ;

// 定义变量 a
int a = 10;

// 定义变量 a 的引用 b
int& b = a;



2、代码示例 - 普通引用


普通引用代码示例 :

// 包含 C++ 头文件
#include "iostream"

// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;

// 导入 C 头文件
#include <stdio.h>

int main()
{
	// I . 普通引用
	// 定义变量 a
	int a = 10;

	// 定义变量 a 的 普通引用 b
	int& b = a;

	// 打印 普通引用 b 的值
	printf("b = %d\n", b);

	// 修改普通引用 b 的值
	b = 20;

	// 打印 普通引用 b 的值
	printf("b = %d\n", b);


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
    return 0;
}

执行结果 :

b = 10
b = 20
Press any key to continue . . .

【C++】C++ 引用详解 ⑧ ( 普通引用与常量引用 | 常量引用概念与语法 )-LMLPHP





二、常量引用




1、常量引用引入


与 变量引用 相对的就是 常量引用 ;

  • 通过 普通引用 , 可以修改 变量的值 ;
  • 常量引用 , 是不可修改的 , 声明一个 普通变量 的 常量引用 , 之后不再使用 变量 , 转而使用 该 常量引用 , 相当于 将 变量 转为了 常量 ;

常量引用 可以令 变量的引用 转为 常量 ;不能通过 常量引用 修改 变量 ;

如果修改 常量引用 的值 , 编译时会报错 :

error C3892: “b”: 不能给常量赋值

2、常量引用概念与语法


在 C++ 语言中 , " 常量引用 " , 英文名称为 Const Reference , 是一种引用类型 , 另外一种引用就是 " 普通引用 " ;

使用 " 常量引用 " 可以将一个变量的值传递给一个函数的 常量引用形参 , 可以保证该变量值不会在函数内部被修改 ;

" 常量引用 " 常用于如下场景 :

  • 作为函数形参
  • 作为函数返回值
  • 定义对象成员

常量引用 语法 :

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

2、代码示例 - 常量引用不可修改


在下面的函数中 , 先声明了 普通变量 a ,

然后定义了 变量 a 的 常量引用 b ,

常量引用 b 其 本质就是一个常量 , 通过 常量引用 b 可以获取 变量 a 的值 , 但是无法修改 变量 a 的值 ;

如果强行通过 常量引用 b 修改 变量 a 的值 , 则会报错 :

error C3892: “b”: 不能给常量赋值

错误代码示例 :

// 包含 C++ 头文件
#include "iostream"

// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;

// 导入 C 头文件
#include <stdio.h>

int main()
{
	// II . 常量引用
	// 定义变量 a
	int a = 10;

	// 定义变量 a 的 常量引用 b
	const int& b = a;

	// 打印 常量引用 b 的值
	printf("b = %d\n", b);

	// 修改 常量引用 b 的值
	// 报错 : error C3892: “b”: 不能给常量赋值
	b = 20;


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
    return 0;
}

执行结果 :

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

【C++】C++ 引用详解 ⑧ ( 普通引用与常量引用 | 常量引用概念与语法 )-LMLPHP

08-29 11:15