码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-09-21 21:30:54      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

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预处理宏?


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

标签:

原文地址:http://my.oschina.net/u/2467198/blog/509337

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!