c++ primer -- 基于过程的设计(4)

1.声明引入的名字可以被用在什么地方?为回答这个问题,我们将给出域的概念,并且介绍它们是怎样界定一个名字在程序文本文件中的可用范围。具体包括:全局域、局部域。

2.声明引入的运行时刻实体的生命期是什么?为回答这个问题,我们将讲述声明是怎样引入全局对象和函数(在整个程序生成期间一直有效的实体)、局部对象(在程序生成期间的子集上有效的对象),以及动态分配的对象(生命期由程序员控制的对象)的。

3.用来区分名字含义的一般上下文(context)就是域(scope)。c++ 支持三种形式的域:局部域(local scope)、名字空间域(namespace scope)以及类域(class scope)。局部域是包含在函数定义(或者函数块)中的程序文本部分,在函数中的每个复合语句(或块)也有一个独立的局部域。名字空间域是不包含在函数声明、函数定义或者类定义内的程序文本部分。每个类定义都引入了一个独立的类域。同一个名字在不同的域中可以引用不同的实体。由声明引入的名字从声明点直到声明它的域结束为止都是可见的(包含其中的嵌套域)。

4.名字解析(name resolution)是把表达式中的一个名字与某一个声明相关联的过程,也是给出这个名字意义的过程。

5.局部域内的名字解析是这样进行的:首先查找使用该名字的域,如果找到一个声明,则该名字被解析。如果没有找到,则查找包含该域的域。这个过程会一直继续下去,直到找到一个声明或已经查找完整个全局域。如果后一种情况发生,即没有找到该名字的声明,则这个名字的用法将被标记为错误。因为在名字解析期间查找域的顺序由内向外,所以在外围域中的声明被嵌套域中的同名声明所隐藏。

6.在if语句的条件中定义的变量,只在该if语句和相关的else语句,以及这些语句内部的嵌套域中可见。

7.在c++中有一种机制,通过它可以把函数参数的类型和数目编码在函数名中,该机制叫做类型安全链接(type-safe-linkage)。类型安全链接可用来帮助捕捉不同文件中函数声明不匹配的情况。

8.头文件为extern对象声明、函数声明以及inline函数定义提供了一个集中的位置;这被称作声明的局部化(localization)。如果一个文件要使用或定义一个对象或函数时,它必须包含(include)相应的头文件。头文件提供了两个安全保证。第一,保证所有文件都包含同一个全局对象或函数的同一份声明。第二,如果需要修改声明,则只需改变一个头文件。从而不至于再发生只修改了某一个特殊的文件中的声明。

9.使用头文件有一些需要注意的地方。第一,头文件提供的生命逻辑上应该属于一个组。第二,编译头文件也需要时间。为降低编译时间开销,有些c++实现提供了预编译头文件支持。(查询系统的c++实现参考手册,了解怎样从一个普通的c++头文件创建预编译头文件)第三,头文件不应该含有非inline函数或对象的定义。符号常量和inline函数可以被定义多次。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值