C++编程思想附录.pdf
文本预览下载声明
下载
下载
附录A 其 他 性 能
在写这本书时,C + + 的标准还没有制定出来。虽然实际上所有这些特征最终都会被加入到
这个标准中,但有些并没有在所有的编译器中出现。这个附录中简单地介绍了一些其他特征,
这些应该在编译器中(或在编译器的未来版本中)去查找。
A.1 bool 、true、false
实际上每个人都在用布尔形变量,而且每个人定义它们的方式都不相同 [ 1 ] ,有些人用枚举,
另一些人用t y p e d e f 。 t y p e d e f是一个特殊的问题,因为不能重载它(一个 t y p e d e f对于一个i n t还
是一个i n t ),也不能用它初始化一个唯一的模板。
在标准库中,可能为b o o l类型创建了一个类,但这也不能很好地工作,因为我们只能有了
一个自动类型转换运算符,而没有解决重载问题。
对于这样一个有用的类型,最好的方法是把它建在语言内部。一个 b o o l 型有两种状态,它
们由内部常量t r u e (它转化成一个整数1)和f a l s e (它转化成一个整数 0 )表示,这三个名字都是
关键词,另外对部分语言成分作了修改:
成 分 b o o l 型的用法
‖! 取b o o l 型参数,返回b o o l值
=
产生b o o l型结果
= == !=
if ,for 条件表达式转换为一个b o o l值
w h i l e , d o
? : 第一个操作数转换为b o o l值
因为已有的许多代码常用一个i n t表示一个标志,编译器将一个i n t 隐式转换成一个b o o l型。
理想情况下,编译器将给我们一个警告,以建议我们改正这种情况。
一种俗话称“低劣的编程风格”的情况是用 + +来把一个标志置为t r u e 。这是允许的,但不
赞成这样做,这意味着在将来某个时候它会变成不合法的。这个问题与 e n u m 的增运算一样:
我们正在做从bool 型转化成i n t型的隐式类型转换,增加这个值(可能越出一般的 b o o l值0 ~ 1 的
范围),然后隐式地映射回来。
在必要时指针也可以自动转换成b o o l 型的。
A.2 新的包含格式
随着C + + 的不断发展,不同的编译器开发商选择了不同的文件扩展名。另外,不同的操作
系统对文件名有不同的限制,特别是在文件名的长度上。为了适应各种不同的情况, C + +标准
采纳了一个新的格式,它允许文件名突破那很不好的八个字符的限制,并且取消了扩展名。比
如,包含I O S T R E A M . H就变成了:
# include iostream
[1] 见“Josée Lajoie ,The new cast notation and the bool data type ”C + +报告, 1 9 9 4年9月。
附录A 其 他 性 能 405
下载
解释器按特定的编译器和操作系统去实现文件的包含,必要时缩短文件名并加上一个扩展
名。如果我们想在编译器开发商支持这一特性之前使用这一风格的包含文件,也可以把开发商
提供给我们的头文件拷贝到不带扩展名的文件中去。
所有从标准C 中继承来的库在我们包含它们时还是用 . h作为扩展名,这使读者很容易从我
们使用的C + +库中识别出C库。
A.3 标准C++库
标准的C + +不仅包含了全部的标准C库(做了一点小的增补和改动,以支持安全类型),而
且还增加了一些它自己的库。这些库比标准的 C库功能更强,从中获得的益处与从 C 向C + +转
变获得的益处类似。对这些库的最好的参考文献就是标准本身(写这本书时
显示全部