C++中引用的一些问题
C++中有没有引用数组这个概念?
试分析下面这段代码会不会出现错误。
struct St
{int& x;int& y;int& z;
};int a = 1;int main()
{int b = 2;int* pc = new int(3);St st = {a, b, *pc}; int& array[] = {a, b, *pc}; delete pc;
}
结构体变量中有三个int&型成员,由于引用在定义时必须初始化,所以结构体变量就被a,b,pc分别初始化了,成为了他们的别名。所以St st = {a, b, *pc}这一句并没有错误。
打印出结构体中三个引用的地址:
&st.x :010E2000
&st.y :011EFE0C
&st.z :0175B5C
然后我们再来看看这一句:int& array[] = {a, b, *pc}。这一句表示定义一个引用数组,也分别由a、b、*pc初始化。但是编译器却报错了。原因其实是数组元素在内存中是连续的,不能将三个地址不连续的变量初始化给int&型数组。
所以得出结论:C++中没有引用数组这个概念!
引用占内存吗?
经过上面的问题,我们发现引用没有独立空间,和其引用实体共用同一块空间,但真的是这样吗?
把上面的代码进行修改:
struct St {int start;int& x;int& y;int& z;int end;
};int a = 1;int main()
{int b = 2;int *pc = new int(3);St st = { 10, a, b, *pc, 20};cout << &st.start << endl;cout << &st.x << endl;cout << &st.y << endl;cout << &st.z << endl;cout << &st.end << endl;delete pc;return 0;
}
在结构体开始和结束时分别加了一个变量。
打印出start和end变量的地址:
&st.start:0093F718
&st.x :010E2000
&st.y :011EFE0C
&st.z :0175B5C
&st.end:0093F728
我们发现,x、y、z依旧是引用的实体的地址,而start和end却是连续存放的,中间相隔了12个字节(减去start的4字节)。
所以得出结论:引用在底层实现上实际是有空间的,只不过编译器不让我们直接获取到实现引用的那个指针常量。
C++中引用的一些问题相关推荐
- Android Studio 在项目中引用第三方jar包
在Android Studio项目中引用第三方jar包的方法: 步骤: 1.在build.gradle文件中添加如下代码: 备注:要添加在Android作用域下 sourceSets {main {j ...
- Angular7中引用外部JS文件
Angular7中引用外部JS文件,步骤如下: 1. 将引入的js文件放到项目的src/assets下 2. 在angular.json文件中找到scripts项并配置js文件的相对路径 3. 在sr ...
- IOS 编程中引用第三方的方类库的方法及常见问题
方法一:直接复制全部源文件到项目中 这样的方法就是把第三方类库的全部源文件复制到项目中.直接把全部.h和.m文件拖到XCode项目中就可以. 注意: 1. 假设第三方类库引用了一些系统自带类库.那么在 ...
- postman简单教程,如何在请求中引用上次请求返回的值
做接口测试,一定会遇到这种情况,需要拿上次请求的值在本次请求中使用,比如,我们去测试一个东西,要去登录才能做其他的操作,需要拿到登录返回数据中的某些字段,比如,token啊等... 如果发一次请求,就 ...
- iOS中引用计数内存管理机制分析
在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...
- matlab messagebox函数,[MATLAB]在C#中引用MATLAB函数
环境:VS2017+MATLAB R2017a ①打开上次我们生成的BPClass.cs文件(目录:~//bin/BP/for_testing),得在C#程序中引用生成的dll文件(目录:~//bin ...
- 在html中引用css样式表,怎么引用css样式?
怎么引用css样式?下面本篇文章给大家介绍一下在HTML中引用css样式的几种方式.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 1.使用行内样式表 语法:在标签内部写入一个sty ...
- IDEA中引用不到HttpServlet的解决方案
IDEA中引用不到HttpServlet的解决方案 参考文章: (1)IDEA中引用不到HttpServlet的解决方案 (2)https://www.cnblogs.com/qcq0703/p/11 ...
- 查询qt中的数据_EXCEL在多表中查询数据(函数中引用工作表的办法)
与EXCEL打交道也好几年了,你是不是还停留在经常性简单而重复的工作呢?每月忙的时候天天加班,空闲的时候盯着手机刷刷刷,,既然如此,轻松的时候就应该琢磨下怎样提升效率,比如规范好自己的数据源,设计一套 ...
- Android中自定义View的研究 -- 在XML中引用自定义View
如果在一直使用SetContentView(new HellwView(this)觉得总是少了一点东西,少了什么了,失去了Android中使用XML定义组件的便携性,这种感觉让人很不爽,呵呵,在这节里 ...
最新文章
- nodejs中使用worker_threads来创建新的线程
- C++ 11 深度学习(六)智能指针综述
- Vue封装下拉框组件时,为document绑定原生事件addEventlistener(click“),切换页面之后事件还未被摧毁...
- ubuntu命令模式中文乱码
- python中reshape_Numpy之reshape()使用详解
- OJ1046: 奇数的乘积(C语言)
- opencv 轮廓放大_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...
- ALGO-84 矩阵乘法
- java 局部变量垃圾回收_java局部变量对垃圾回收的影响
- DELPHI中完成端口(IOCP)的简单分析(1)
- uwp - ContentDialog - 自定义仿iphone提示框,提示框美化
- java 配置dbcp_java – 使用DBCP进行Tomcat配置
- 网络编程+并发编程总结
- Minecraft Mod 开发:2-Hello, Minecraft Mod World!
- 将文件转换成json
- 2.2 DP: Value Iteration Gambler‘s Problem
- Linux:CPU频率调节模式以及降频方法简介
- PCB板的线宽、铜厚度,与通过的电流对应的关系,一文看懂!
- 微信新版本(6.6.7)功能设计背后的逻辑及需求
- 关于cocos creator 2.0的废除cc.p接口Sorry, cc.p is deprecated. Please use cc.v2 instead
热门文章
- 银河麒麟更换源及离线下载deb
- vs下 string输出中文 打印中文
- python怎么导入txt数据库_Python导入txt数据到mysql的方法
- linux分区dh满了,python 在linux下能过top,和dh命令获得cpu,内存,以及硬盘信息 - Sprite...
- idrmyimage 技巧_王者荣耀公孙离2000场-心得技巧,教你究极进阶!
- linux防火墙文件找不到,防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件
- 软件开发工程师证书有用吗_bim工程师证书有用吗 含金量怎么样?
- Space-Filling Designs
- 禁止php 报错怎么做,php – 禁用Laravel错误处理程序
- matlab中inband函数,pjsip 实现 DTMF 数据获取,并解析按键信息