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++]引用浅析的更多相关文章

  1. C++类型引用浅析

    C++类型引用浅析 引言 从最早被Bjarne Stroustrup 发明,作为C语言的扩展,到广为人知C++98标准,再到最新的C++11.C++14和C++17标准,C++一直在不断地进步.演化. ...

  2. C++右值引用浅析

    一直想试着把自己理解和学习到的右值引用相关的技术细节整理并分享出来,希望能够对感兴趣的朋友提供帮助. 右值引用是C++11标准中新增的一个特性.右值引用允许程序员可以忽略逻辑上不需要的拷贝:而且还可以 ...

  3. Swift 学习笔记 (三) 之循环引用浅析

    原创:转载请注明出处 110.自动引用计数实践 下面的例子展示了自动引用计数的工作机制.例子以一个简单的Person类开始,并定义了一个叫name的常量属性: class Person {     l ...

  4. 浅析指针(pointer)与引用(reference)

    在c++函数中,形式参数用引用和用指针都可以起到在被调用函数中改变调用函数的变量的作用.什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void fu ...

  5. 一道题浅析 i++,++i,i+1及(引用)&i的区别

    我们可能很清楚i++,++i和i+1级&i的概念,但在实际运用中我们就有可能很容易搞混淆.特别是在递归中区别它们就显得尤为重要了.那首先我们先看一段利用递归逆序字符串的代码,你能回答出这段代码 ...

  6. Java编程开发之浅析Java引用机制

    对于一个Java的对象而言,存储主要分为两种,一种是内存堆(Heap),内存堆是无序的,主要用来存放创建的Java对象:一种是内存栈(Stack),主要用来存放Java引用,然后在管理过程使用Java ...

  7. 取地址与解引用 C指针浅析

    C语言指针入门需要掌握的两个概念就是取地址&和解引用*,下面我们按例子来理解这两个符号的使用. int main() { int a = 0; int* pa = &a;//取地址操作 ...

  8. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  9. netty5 HTTP协议栈浅析与实践

      一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...

随机推荐

  1. C# - InnerList

    运行效果: 代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; name ...

  2. JS实现图片翻书效果

    picture.html <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http- ...

  3. 基于visual Studio2013解决面试题之1408桶排序

     题目

  4. Eclipse用法和技巧十七:覆盖父类方法

    在学校里面学习java,遇到访问权限修饰符一直停留在public是公有的,外面可以访问:protected是对子类可见的,外部不可以访问:private仅在本类中可见.工作之后,接触到了java代码多 ...

  5. Extjs实现树形结构三连选

    当项目中需要一个部门人员选择或者省市县地域连选时,就需要树形结构的连选. 再此,写了一个简单的树形结构三连选功能,模拟从后台读取数据和处理数据(欢迎大家交流指正). 代码如下: 循环创建三棵树,其中只 ...

  6. Appium 的安装启动

    Appium 的安装方式根据官网提供的是使用nodejs 安装,但是官方给出了三种方法 参考网址: appium下载地址: https://bitbucket.org/appium/appium.ap ...

  7. FireMonkey Style Designer

    http://docwiki.embarcadero.com/RADStudio/Berlin/en/FireMonkey_Style_Designer http://docwiki.embarcad ...

  8. KaOS 2016.04 发布,桌面 Linux 发行版

    KaOS 2016.04 发布了,KaOS是一份桌面Linux发行,其特色在于最新版本的KDE桌面环境及其他流行的使用Qt工具包的软件程序.它最初基于Arch Linux,但从2013年四月起,开发者 ...

  9. 湖南省第八届大学生程序设计大赛原题 D - 平方根大搜索 UVA 12505 - Searching in sqrt(n)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30746#problem/D D - 平方根大搜索 UVA12505 - Searchin ...

  10. hadoop学习;hadoop伪分布搭建

    先前已经做了准备工作安装jdk什么的,以下開始ssh免password登陆.这里我们用的是PieTTY工具,当然你也能够直接在linux下直接操作 ssh(secure shell),运行命令 ssh ...