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. 基于visual Studio2013解决算法导论之010快排中应用插入排序

     题目 快排中引用插入排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> ...

  2. Java的位运算符具体解释实例——与(&amp;)、非(~)、或(|)、异或(^)

    位运算符主要针对二进制,它包含了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.以下 ...

  3. HTML的表单元�

    HTML的表单元素 表单元素是同意用户在表单中(比方:文本域,下拉列表,单选框,复选框等等)输入信息的元素 表单标签 文本域(Text Fields) 当用户要在表单中键入字母,数字等内容时,就会用到 ...

  4. Android如何监听蓝牙耳机的按键事件

    写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的 ...

  5. perl 函数回调 引用$client->run(sub {$client->sync});

    匿名函数引用: [root@wx03 wx]# perl a1.pl CODE(0x2077b30) test [root@wx03 wx]# cat a1.pl $ref= sub {return ...

  6. 前端project师,确定你的目标吧!无能的人才管他叫命运

    导语: 你为自己定过一个不靠谱的目标,是20年前的事了吧. 长大你想干什么?你的回答是什么?现在实现了吗? 如今,你每天都坐在同一个格子间的同一个电脑前,会不会感到每天都像是在复印,感到前途是模糊的, ...

  7. sql server日期字段值的比较

    sql server中对日期字段值的比较 sql server中对日期字段的比较方式有多种,介绍几种常用的方式:用northwind库中的employees表作为用例表.1.between...and ...

  8. [转]java开发环境搭建

    分成两个部分: 1.下载安装jdk,并配置环境变量 链接:http://www.runoob.com/java/java-environment-setup.html 2.安装Eclipse 链接:h ...

  9. HTML+CSS - 搜索 And 高级搜索

  10. RAD路线规划2016版

    http://community.embarcadero.com/article/news/16211-embarcadero-rad-studio-2016-product-approach-and ...