【C++】C++ 引用详解 ⑨ ( 常量引用初始化 | C / C++ 常量分配内存的四种情况 )

文章目录

  • 一、常量引用初始化
    • 1、使用 " 普通变量 " 初始化 " 常量引用 "
    • 2、使用 " 常量 / 字面量 " 初始化 " 常量引用 "
    • 3、C / C++ 常量分配内存的四种情况
    • 4、代码示例 - 常量引用初始化





一、常量引用初始化




1、使用 " 普通变量 " 初始化 " 常量引用 "


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

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

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

2、使用 " 常量 / 字面量 " 初始化 " 常量引用 "


在 博客 【C++】C 语言 和 C++ 语言中 const 关键字分析 ( const 关键字左数右指原则 | C 语言中常量的原理和缺陷 | C++ 语言中常量原理 - 符号表存储常量 ) 中 , 详细的分析了常量的本质 , 如果 定义 " 普通常量 " , 那么该 常量 是 定义在了 符号表 中 ;

	// 定义普通常量 , 将 m 定义在了 符号表 中 const int m = 20;

如果定义一个 " 普通引用 " , 引用一个字面量 , 字面量 是 数值 , 在代码段中 , 没有放在内存中 , 没有内存地址 ,

" 引用 " 的 本质 是一个 已有 内存空间 的别名 ,

如果没有一个 已存在 的内存空间 , " 引用 " 就没有意义了 ;

" 引用 " 就是为一段 " 内存 " 起一个别名 , 如果没有 内存 , 也就不存在引用 ;


因此 , 下面的代码 , 会报错 , error C2440: “初始化”: 无法从“int”转换为“int &” ;

	// 普通引用 引用字面量 , 直接报错 // error C2440: “初始化”: 无法从“int”转换为“int &”int& n = 30;

如果定义一个 " 常量引用 " , 引用一个字面量 , 字面量 是 数值 , 这是合法的 ;

	// 常量引用 引用字面量 , 不会报错const int& n = 30;

上述用法 , C++ 编译器 会为 常量引用 n 分配一个内存空间 , 这是 const 常量分配内存空间的 三种情况之一 ;


3、C / C++ 常量分配内存的四种情况


C 语言中 const 常量 是 只读变量 , 有独立的存储空间 ;

C++ 语言中的 const 常量 存储在 符号表中 , 默认情况下 const 常量不会分配内存空间 , 但是在下面的三种情况下会分配内存空间 ;

  • 如果 const 常量是 全局常量 , 在其它文件中调用 , 会分配内存空间 ;
  • 如果对 const 常量 进行 取地址操作 & , 会分配内存空间 ;
  • 如果使用 const 修饰引用 , 声明 一个 " 常量引用 " , 也会分配内存空间 ;

4、代码示例 - 常量引用初始化


代码示例 :

// 包含 C++ 头文件
#include "iostream"// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;// 导入 C 头文件
#include <stdio.h>int main()
{// I . 使用 普通变量 初始化 常量引用// 定义变量 aint a = 10;// 定义变量 a 的 常量引用 b// 使用 普通变量 初始化 常量引用const int& b = a;// II . 使用 常量 / 字面量 初始化 常量引用// 定义普通常量 , 将 m 定义在了 符号表 中 const int m = 20;// 普通引用 引用字面量 , 直接报错 // 报错信息 : error C2440: “初始化”: 无法从“int”转换为“int &”// " 引用 " 就是为一段 " 内存 " 起一个别名 , 如果没有 内存 , 也就不存在引用 ;//int& n = 30;// 常量引用 引用字面量 , 不会报错const int& n = 30;// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
}

执行结果 :

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/86828.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

消息中间件 介绍

MQ简介 MQ,Message queue,消息队列&#xff0c;就是指保存消息的一个容器。具体的定义这里就不类似于数据库、缓存等&#xff0c;用来保存数据的。当然&#xff0c;与数据库、缓存等产品比较&#xff0c;也有自己一些特点&#xff0c;具体的特点后文会做详细的介绍。 现在常用…

使用 ChatGPT 创建 PowerPoint 演示文稿

让 ChatGPT 成为您的助手来帮助您编写电子邮件很简单,因为众所周知,它非常能够生成文本。很明显,ChatGPT 无法帮助您做饭。但您可能想知道它是否可以生成文本以外的其他内容。在上一篇文章中,您了解到 ChatGPT 只能通过中间语言为您生成图形。在这篇文章中,您将了解使用中…

研磨设计模式day12迭代器模式

目录 场景 解决方案 解决思路 代码示例 代码改造 Java实现迭代器 迭代器模式的优点 思考 何时选用 场景 大公司收购了一个小公司&#xff0c;大公司的工资系统采用List来记录工资列表&#xff0c;而小公司是采用数组&#xff0c;老板希望通过决策辅助系统来统一查看…

VUE笔记(一)初识vue

一、vue的简介 1、什么是vue 官网地址:Vue.js Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。 构建用户界面&#xff1a;之前在学习vue之前通过原生js对DOM操作进行构建用户界面的 使用原生js构建用户界面的不足 - 没有规范&#xff0c…

IDEA的maven想显示层级关系,而非平级

新版和旧版的IDEA的位置不一样&#xff0c;2023.2.1的版本在右上角的“” 这个位置 如图所示&#xff1a; 然后点击按模块分组&#xff1a;

【PostGreSQL】PostGreSQL到Oracle的数据迁移

项目需要&#xff0c;有个数据需要导入&#xff0c;拿到手一开始以为是mysql&#xff0c;结果是个PostGreSQL的数据&#xff0c;于是装数据库&#xff0c;但这个也不懂呀&#xff0c;而且本系统用的Oracle&#xff0c;于是得解决迁移转换的问题。 总结下来两个思路。 1、Postg…

芯片 半导体 晶圆

芯片&#xff08;chip&#xff09;就是半导体元件产品的统称&#xff0c;是 集成电路&#xff08;IC&#xff0c; integrated circuit&#xff09;的载体&#xff0c;由晶圆分割而成。 半导体集成电路是将很多元件集成到一个芯片内, 以处理和储存各种功能的电子部件。由于半导…

error: can‘t find Rust compiler

操作系统 win11 pip install -r requirements.txt 报错如下 Using cached https://pypi.tuna.tsinghua.edu.cn/packages/56/fc/a3c13ded7b3057680c8ae95a9b6cc83e63657c38e0005c400a5d018a33a7/pyreadline3-3.4.1-py3-none-any.whl (95 kB) Building wheels for collected p…

2023河南萌新联赛第(六)场:河南理工大学 C - 旅游

2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学 C - 旅游 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K Special Judge, 64bit IO Format: %lld 题目描述 小C喜欢旅游&#xf…

科大讯飞永久免费GPT入口来了!!!

讯飞GPT永久免费使用入口注册链接&#xff1a;讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞。 登录讯飞账号后&#xff0c;点击进入体验。 进入体验页面后&#xff0c;选择景点推荐。 笔者让其写一篇关于讯飞GPT介绍的文案。 讯飞GPT是一款由讯飞公司推出的人工智能语…

Linux环境下SVN服务器的搭建与公网访问:使用cpolar端口映射的实现方法

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

pip批量下载包、批量安装离线包

requirements.txt 格式 批量下载 pip download -d D:\packs -r requirements.txt-d 参数设置下载包存放的目录 -r 包列表 批量在线安装 pip install -r requirements.txt 批量离线安装 pip install --no-index --find-linksD:\packs -r requirements.txt–no-index 参数表…