《C++ Primer 第三版》读书笔记——第八章 域和生命期


1、域(scope)就是用来区分名字含义的一般上下文(context)。

2、名字解析(name resolution)的过程就是把表达式中的一个名字域某一个声明相关联的过程,也是给出这个名字意思的过程。

3、因为名字解析期间查找域的顺序由内向外,所以在外围域中的声明被嵌套域中的同名声明所隐藏。

4、关键字extern为声明但不定义一个对象提供了一种方法。它类似于函数声明,承诺了该对象会在其他地方被定义,或者在此文本文件中的其他地方,或者在程序的其他文本文件中。如:

extern int i;

既指定了关键字extern,又指定了一个显式初始值的全局对象声明将被视为为该对象的定义。

5、符号常量可以在同一程序的不同文件中被定义多次。

6、未初始化的自动对象包含一个随机的位模式,是该存储区上次被使用的结果,它的值被称为未定义的(unspecified)。

7、new表达式调用库操作符new(),delete表达式调用库操作符delete()。

8、如果指针操作数被设置为0,则C++会保证delete表达式不会调用操作符delete()。

9、动态分配的数组第一维不必是常量。

10、用new表达式在空闲存储区内创建一个const对象:

const int *pci = new const int( 1024 );

11、要使用定位new表达式(placement new expression),需包含头文件 。这项设施允许程序员分配大量的内存,供以后通过这种形式的new表达式创建对象。如:

TestClass *pb = new ( buf ) TestClass;
//do something else
delete [] buf;

其中buf在之前被定义过,比如:

char *buf = new char[ 5120 ];

在使用delete时,不是

delete pb;

而必须是

delete [] buf;

12、名字空间并没有消除全局名字空间污染(glocal namespace pollution)问题,但是它大大缓解了这个问题。

13、::member_name指向全局名字空间的成员member_name。

14、只有包围成员声明的名字空间(该成员所在的名字空间及其外围名字空间)才可能包含它的定义。只有一个名字空间成员在名字空间定义中已经声明过,它才能在该名字空间定义之外被定义。当名字空间成员在名字空间外被定义时,名字空间名和函数的返回值必须被限定修饰。

15、未命名的名字空间的定义局部于一个特定的文件。

16、简化名字空间成员的用法:名字空间别名(namespace alias)、using声明、using指示符。

17、using声明引入的名字空间有以下特性:

  • 它在该域中唯一
  • 由外围域中的声明引入的相同名字被其隐藏
  • 它被嵌套域中的相同名字的声明隐藏

18、using指示符使名字空间成员可见,就好像它们是在名字空间被定义的地方之外被声明的一样。

19、使用using声明而不是using指示符可以更好的控制全局名字空间污染问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值