文章目录
- 一、普通引用
- 1、概念说明
- 2、代码示例 - 普通引用
- 二、常量引用
- 1、常量引用引入
- 2、常量引用概念与语法
- 2、代码示例 - 常量引用不可修改
一、普通引用
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 . . .
二、常量引用
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 个 ==========