从零单排c++ primer(19)

来源:互联网 发布:win像mac一样装软件 编辑:程序博客网 时间:2024/05/22 07:41
(1)一个模板参数名的可用范围是在其声明之后,至模板声明或定义结束之前。与任何其他名字一样,模板参数会隐藏外层作用域中声明的相同名字。
(2)与大多数其他上下文不同,在模板内不能重用模板参数名,所以一个模板参数名在一个特定模板参数列表中只能出现一次。
(3)模板声明必须包含模板参数,与函数参数相同,声明中的模板参数的名字不必与定义中的相同。
(4)一个给定模板的每一个声明和定义必须有相同数量和种类的参数。
(5)一个特定文件所需要的所有模板的声明通常一起放置在文件开始位置,出现于任何使用这些模板的代码之前。
(6)通常情况下,c++语言假定通过作用域运算符访问的名字不是类型。
(7)当我们希望通知编译器一个名字表示类型时,必须使用关键字typename,而不能使用class。
(8)在新标准中,我们可以为函数和类模板提供默认实参,而更早的c++标准只允许为类模板提供默认实参。
(9)与函数默认实参一样,对于一个模板参数,只有当它右侧的所有参数都有默认实参时,它才可以有默认实参。
(10)如果一个模板为其所有模板参数都提供了默认实参,且我们希望使用这些默认实参,就必须在模板名之后跟一个空尖括号对。
(11)一个类可以包含本身是模板的成员函数,这种成员被称为成员模板,成员模板不能是虚函数。
(12)对于类模板,我们也可以为其定义成员模板,在此情况下,类和成员各自有自己的、独立的模板参数。
(13)在大系统中,在多个文件中实例化相同模板的额外开销可能非常严重。在新标准中,我们可以通过显示实例化来避免这种开销。
(14)将一个实例化声明为extern就表示承诺在程序其他位置有该实例化的一个非extern声明。
(15)对于一个给定的实例化版本,可能有多个extern声明,但必须只有一个定义。
(16)对每个实例化声明,在程序中某个位置必须由其显示的实例化定义。
(17)在一个类模板的实例化定义中,所有类型必须能用于模板的所有成员函数。
(18)通过在编译时绑定删除器,unique_ptr避免了间接调用删除器的运行时开销,通过在运行时绑定删除器,share_ptr使用户重载删除器更为方便。
(19)从函数实参来确定模板实参的过程被称为模板实参推断。
(21)如果参数类型不是引用类型,则可以对数组或函数类型的实参应用正常的指针转换。
(22)将实参传递给带模板类型的函数形参时,能够自动应用的类型转化只有const转化及数组或函数指针的转换。
0 0
原创粉丝点击