文档章节

理解灵活而奇特的C++-ch09

L
 LinuxCPlusPlus
发布于 2015/09/21 20:15
字数 1030
阅读 63
收藏 5

1.引用?

    引用的概念:引用就是被引用变量的别名,这就意味着被引用变量可以通过两个或多个命名标识符访问内存,故这些命名标识符的内存地址是相等的,引用可以视为隐式的指针变量。但是没有指针变量的解引用和对变量的取    地 址的麻烦。下面是引用变量的一些结论和使用误区:

    C1:引用变量必须在声明的时候就有初值,这个初值有两层含义。被引用内存的值和地址。并且,一旦引用,终身引用。即引用变量一旦引用了一个内存,不能再引用别的内存。注意和用别的变量来赋值的区分。比如:

        T x=...,y=...

        T& refx=x;        表示refx和x共享同一片内存。

        refx=y;                表示修改引用内存中的值,而不是该向引用y的内存。等价于x=y;

    C2: 同指针变量一样,多个引用变量可以共享统一内存,在这些引用变量的任何一个对共享内存(数据)的修改在其他的所有引用变量可见。

    C3:const  T&不能修改引用内存(内存中的数据),但是可以读取。

    C4 :引用变量的对象可以提高函数参数传递和从函数返回的效率,从而避免了赋值内存,而是复制内存地址,相当于在同一内存上的操作。对于对象而言,更是避免了函数参数(以对象)传递和返回对象因为赋值对象而调用复制构造函数的开销。但是非const引用可能不经意间修改内存,那么const T&更为常用。const T&的特点那就是更安全、更高效。

    C5:引用可以想象成不能改指的指针。T* const.

    C6:基于申明引用的同时就要初始化引用变量(让它引用被引用变量的内存)考虑,类中的引用数据成员必须用成员初始化器初始化引用数据成员。事实上,使用成员初始化器初Ctor,始化成员的好处远不止这些。

    C7:const T&可以引用右值(又叫右值引用),右值通常是一些const对象/变量、常量、临时变量或对象、未命名的内存(无名变量)等,而左值引用恰好相反,它必须引用一个清晰定义了的内存,即合法的命名内存(因为计算机按名存取变量)。

    C8:可以对任意数据类型的变量引用,甚至是指针变量(指针的引用,引用的是一个指针变量)。但是无法声明引用的引用(&&)和指向引用的指针。

    C9:最后一点,引用应该尽可能引用一个合法标识符标示的未被释放(注销或销毁)的内存。因为,被引用的变量消失,引用失效。这可能导致一些难以预料或不可诊断的BUG,或一些标准以外的未定义行为发生。

    总之,决定引用变量引用哪个内存(变量)的唯一之处就是在声明引用变量时,初始化的那个内存缓冲区。

    编程箴言,引用比指针安全,const引用比非const引用安全。引用劣于指针的一点大概就是,指针变量可以改指,引用变量绝不可能改指。


      


2.文本?

3.文本表达式?

4.静态(static)?

5.外部(extern)?

6.类型定义(typedef)

7.类型别名(aliases)?

8.类型转换?

9.作用于解析?

10.统一初始化?

11.可选函数语法?

12.空指针文本?

13.尖括号?

14.初始化列表?

15.显示转换运算符?

16.特性?

17.用户自定义的文本?

18.可变参数列表?

19预处理宏?


© 著作权归作者所有

上一篇: Linux 下安装软件
下一篇: C++速成-1
L
粉丝 0
博文 18
码字总数 11810
作品 0
西安
私信 提问
c++中拷贝构造函数&赋值操作符的理解

18/2/6 将具体例子改为Ch09Point类(作为指针变量使用),Ch09CopyConstructor类(作为父类,包含Ch09Point指针变量),Ch09DeprivedClass类(作为子类)。通过这三个类的相互关系,介绍c++...

乔三爷
2016/06/10
114
0
C#转C++的一点分享

从C#转C++有段时间了,一直想分享点什么,但又不太好意思分享,毕竟自己做C++的时间不太长,最近感觉自己已能胜任现有工作,想分享的想法又强了点,前几天看到这样一篇博客《那些年·我们读过的专业...

爱情经纬线
2014/01/17
4.1K
11
java程序员是否要学c++

如题,我觉得其实有这个必要。可以从几个方面来看,首先我们不说java与c++语言本身的特性。从历史上来看,java和c++就有着比较密切的关系。很多人认为java就是简化版的带虚拟机的c++。这样我...

崔钢
2010/10/26
9.3K
25
【北京】人人网 招聘 C++ Java 开发工程师 架构师

人人网IM系统高级C++开发工程师 工作地点:北京 工作类别:技术类 工作描述: 1)责负人人桌面服务器端的开发; 2)责负网站的实时聊天及实时消息推送系统的开发 3)系统的优化,改进及日常维...

antonio
2011/11/25
931
3
Java程序员如何高效而优雅地入门C++

Java程序员如何高效而优雅地入门Cpp,由于工作需要,需要用C++写一些模块。关于C++ 的知识结构,虽说我有过快速学习很多新语言的经验,但对于C++ 我也算是老手,但也还需要心生敬畏,本文会从...

小欣妹妹
2018/04/23
105
1

没有更多内容

加载失败,请刷新页面

加载更多

Java FOR-EACH循环

FOR-EACH循环使得代码更加的简短,也让代码更加易懂,其实他并没有加入什么新的功能。他的功能完全可以用简单的FOR循环代替。 for-each的用法: int a[] = {1,2,3,4,5,6} for(int s:a){ Syst...

无名氏的程序员
16分钟前
2
0
使用HTML5的History API

本文转载于:专业的前端网站➣使用HTML5的History API   HTML5 History API提供了一种功能,能让开发人员在不刷新整个页面的情况下修改站点的URL。这个功能很有用,例如通过一段JavaScript代...

前端老手
18分钟前
2
0
JAVA 编写redisUtils工具类,防止高并发获取缓存出现并发问题

import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.core.BoundHashOperations;import org.springframework.data.redis.core.BoundValueOperations;import org.......

huangkejie
今天
7
0
JMM内存模型(一)&volatile关键字的可见性

在说这个之前,我想先说一下计算机的内存模型: CPU在执行的时候,肯定要有数据,而数据在内存中放着呢,这里的内存就是计算机的物理内存,刚开始还好,但是随着技术的发展,CPU处理的速度越...

走向人生巅峰的大路
今天
98
0
你对AJAX认知有多少(2)?

接着昨日内容,我们几天继续探讨ajax的相关知识点 提到ajax下面几个问题又是必须要了解的啦~~~ 8、在浏览器端如何得到服务器端响应的XML数据。 通过XMLHttpRequest对象的responseXMl属性 9、 ...

理性思考
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部