C++的其他要点
*异常(exception):C++的这个概念源于Ada,也源于Clu (MIT所开发的一种实验性的语言,它的关键思想是cluster[集群])。它用于在错误处理时改变程序的控制流。异常通过发生错误时把处理自动切换到程序中用于处理错误的那部分代码,以简化错误处理。
*模板(template):这个特性支持参数化类型。同类/对象的关系一样,模板/函数的关系也可以看作是为算法提供一种“甜点工具”的方法。一旦确定了基本的算法,你可以把它应用于不同的类型。它的语义比较复杂,下面的代码:
template<class T> T min(T a, T b) {
return (a < b) ? a : b;
}
允许你对min函数和变量a,b赋予任意的类型T(该类型必须能接受<操作符)。有些人称模板为编译时的多态。这是一个优点,但它也意味着一个通过模板声明的操作可以由不同的类型来进行,所以你必须在编译时决定使用哪个类型。
*内联(inline)函数:程序员可以规定某个特定的函数在行内以指令流的形式展开(就像宏一样),而不是产生一个函数调用。
*new和delete操作符:用于取代malloc()和free()函数。这两个操作符用起来更方便一些(如能够自动完成sizeof的计算工作,并会自动调用合适的构造函数和析构函数)。new能够真正地建立一个对象,malloc函数只是分配内存。
*传引用调用(call-by-reference,相当于传址调用):C语言只使用传值调用(call-by-value)。C++在语言中引入了传引用调用,可以把对象的引用作为参数传递。
C++设计目标:往事已矣,且看今朝
C++的设计受限于严格的兼容性、内部一致性和高效率。任何特性如果会引起下列后果,就不能被添加到C++中:
*在源代码一级或链接器一级中引起与C语言的严重不兼容性;
*会给不使用该特性的程序带来运行时间或空间的额外负担;
*会增加C程序的运行时间或空间需求;
*与C语言相比会显著增加编译时间;
*只能够通过在编译环境(链接器、载入器等)中附加条件来实现,无法简单而有效地在传统的C编程环境中实现。
有些应该被添加,但由于上述准则最终还是被割爱的特性有垃圾收集、参数化类、异常、多重继承、对并发性的支持以及与编程环境的整合。并非所有这些可能的扩展都适合C++。在选择和设计语言的特性时,如果不对其实行严格的限制,其结果可能就是产生一对庞大、笨拙而效率低下的垃圾。C++设计上的严格限制也许会带来益处,并继续指引C++的发展。