[C++]引用浅析
Date:
2013-12-22
Summary:
引用数据类型的一些概念记录
(沟通中提到引用必须结合语境才能知道说的是引用变量还是“引用”这一行为,再次提到引用指的一般是引用变量)
Contents:
1.什么是引用?
C++中提到引用,一般指的是C++中的变量的一种,它是一种数据类型,一种复合的数据类型.
C++ Primer plus中提到,引用是已定义的变量的别名。它的主要用途是作为函数的形参(之后会记录函数形参的有关知识,这里就只记录引用了,目的还是在于关注点单一)
2.创建引用变量
a).通过类型关键字和&操作符声明引用变量
b).引用变量必须在声明时初始化
int num = 10;
int& refNum = num; (int&描述了变量refNum是一个引用int类型的引用变量)
3.引用的原理
定义引用时,程序把引用和它初始值绑定在一起,而不将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起,无法令引用重新绑定到另外的一个对象。
定义了一个引用之后,对此引用做的一切操作,其实都是在与之绑定的对象上进行的。
Notes:
Nothing
EX:
//
// main.cpp
// Cpp_All_Test
//
// Created by StephenLee on 1/1/14.
// Copyright (c) 2014 StephenLee. All rights reserved.
// int num = 10; // a).
// 声明一个引用变量refNum,并且在声明时候初始化,否则编译报错
int& refNum = num; //可见引用就是其绑定对象的一个别名而已,值相同,地址也相同
cout << "refNum = " << refNum << " refNum变量 地址:" << &refNum << endl;
cout << "num = " << num << " num变量 地址:" << &num << endl; // b).
// 对引用变量进行的所有操作,其实就是对引用变量绑定的数值进行操作
// 运算操作
refNum += 1;
cout << "refNum = " << refNum << " refNum变量 地址:" << &refNum << endl;
cout << "num = " << num << " num变量 地址:" << &num << endl;
// 赋值操作
int num2 = 20;
refNum = num2; //注意此处。 看上去好像是修改引用变量,让其引用到其他对象上。其实不是,引用一旦初始化绑定了某个对象
//就无法再绑定到其他对象上,这里其实是等价于: num = num2; 然后refNum依然绑定的是num而非num2
cout << "refNum = " << refNum << " refNum变量 地址:" << &refNum << endl;
cout << "num = " << num << " num变量 地址:" << &num << endl;
THE END
[C++]引用浅析的更多相关文章
- C++类型引用浅析
C++类型引用浅析 引言 从最早被Bjarne Stroustrup 发明,作为C语言的扩展,到广为人知C++98标准,再到最新的C++11.C++14和C++17标准,C++一直在不断地进步.演化. ...
- C++右值引用浅析
一直想试着把自己理解和学习到的右值引用相关的技术细节整理并分享出来,希望能够对感兴趣的朋友提供帮助. 右值引用是C++11标准中新增的一个特性.右值引用允许程序员可以忽略逻辑上不需要的拷贝:而且还可以 ...
- Swift 学习笔记 (三) 之循环引用浅析
原创:转载请注明出处 110.自动引用计数实践 下面的例子展示了自动引用计数的工作机制.例子以一个简单的Person类开始,并定义了一个叫name的常量属性: class Person { l ...
- 浅析指针(pointer)与引用(reference)
在c++函数中,形式参数用引用和用指针都可以起到在被调用函数中改变调用函数的变量的作用.什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void fu ...
- 一道题浅析 i++,++i,i+1及(引用)&i的区别
我们可能很清楚i++,++i和i+1级&i的概念,但在实际运用中我们就有可能很容易搞混淆.特别是在递归中区别它们就显得尤为重要了.那首先我们先看一段利用递归逆序字符串的代码,你能回答出这段代码 ...
- Java编程开发之浅析Java引用机制
对于一个Java的对象而言,存储主要分为两种,一种是内存堆(Heap),内存堆是无序的,主要用来存放创建的Java对象:一种是内存栈(Stack),主要用来存放Java引用,然后在管理过程使用Java ...
- 取地址与解引用 C指针浅析
C语言指针入门需要掌握的两个概念就是取地址&和解引用*,下面我们按例子来理解这两个符号的使用. int main() { int a = 0; int* pa = &a;//取地址操作 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- netty5 HTTP协议栈浅析与实践
一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...
随机推荐
- OSX: 真的吗?Mac OS X重大漏洞 改时钟获系统最高权限
9月3日才注意到这个在8月28日刊登在英文网站9月1日在驱动之家的,关于OS X系统的sudo漏洞没有修补的新闻,今天才有时间成文上传. 这个sudo漏洞是在2013年2月27日被公布出来的,它的注册 ...
- FileStream -- 复制文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 3890: [Usaco2015 Jan]Meeting Time( dp )
简单的拓扑图dp.. A(i, j), B(i, j) 表示从点 i 长度为 j 的两种路径是否存在. 用bitset就行了 时间复杂度O(m) --------------------------- ...
- 添加Main-Class到manifest中
Maven默认打包生成的jar是不能够直接运行的,因为带有main方法的类信息不会添加到manifest中(打开jar文件中的META-INF/MANIFEST.MF文件,将无法看到Main-Clas ...
- HDU - 5036 Explosion
Problem Description Everyone knows Matt enjoys playing games very much. Now, he is playing such a ga ...
- Ural1109_Conference(二分图最大匹配/匈牙利算法/网络最大流)
解题报告 二分图第一题. 题目描写叙述: 为了參加即将召开的会议,A国派出M位代表,B国派出N位代表,(N,M<=1000) 会议召开前,选出K队代表,每对代表必须一个是A国的,一个是B国的; ...
- 基于visual Studio2013解决面试题之0801对称字符串
题目
- javascript面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下来将为大家讲解在JS中面向对象的实现. 工厂 ...
- smartforms客制页格式
smartforms需要打印非A4纸时需要手动创建页格式:创建事务代码:spad, 操作的时候需要 把所有步骤都做一遍方可正常打印,不然只能停留在预览界面无法打印.
- 终于懂了:TWinControl.DefaultHandler里的CallWindowProc(FDefWndProc)还挺有深意的,TButton对WM_PAINT消息的处理就是靠它来处理的(以前不明白为什么总是要调用inherited,其实就是没有明白TWinControl.DefaultHandler的真正用处)
我忽然发现:TButton既没有处理WM_PAINT,又没有Paint()或者PaintWindow(),那么它是什么时候被绘制的? Form1上放2个TButton,然后设置代码: procedur ...