August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
显然,用类型来参数化类是很有用的。那么,用“其他东西”(如整型值或字符串值)来参数化类又会怎样呢?本质上,任何类别的实参都是有用的,但我们只考虑类型和整数作为参数。其他类别的参数并不像这两种参数那么有用,并且在C++中使用其他类别的参数需要掌握一些非常细节的语言特性。
下面我们讨论一个例子,这是整型值作为模板实参的最常见的用途——一个容器所包含的元素数在编译时就已确定:
我们可以像下面这样使用array(参见15.7节):
显然,array是很简单的——比vector更简单,功能也更有限——那么人们为什么还要使用array而不是vector呢?一种答案是“效率”。我们在编译时就已经知道array的大小,因此编译器可以(为全局对象如gb)分配静态内存和(为局部变量如loc)分配栈内存而不是在自由存储空间中分配内存。当我们进行范围检查时,可直接与常量(大小参数N)进行比较。对于大多数程序而言,效率的提高并不那么显著,但如果你编写的是一个关键的系统组件,例如网络驱动,即使很小的性能提升也很重要。更重要的是,有些程序可能不允许使用自由空间。这类程序通常是嵌入式系统程序和/或安全攸关的程序(参见第25章)。在这类程序中,array比vector更具有优势,因为不会违反临界限制(不使用自由空间)。 ...
Read now
Unlock full access