从零单排c++ primer(18)

(1)一个非类型参数可以是一个整形或者是一个指向对象或函数类型的指针或引用。
(2)绑定指针或引用非类型参数的实参必须具有静态的生存期,不能用一个普通局部变量或动态对象作为指针或引用非类型模板参数的实参。
(3)模板程序应该尽量减少对实参类型的要求。
(4)当编译器遇到一个模板定义时,它并不生成代码。只是当我们实例化出模板的一个特定的版本时,编译器才会生成代码。
(5)函数模板和类模板成员函数的定义通常放在头文件中。
(6)保证传递给模板的实参支持模板所要求的操作,以及这些操作在模板中能正确作用,是调用者的责任。
(7)一个类模板的每一个实例都形成一个独立的类,类型blob<string>与任何其他blob类型都没有关系,也不会对任何其他blob类型的成员有特殊的访问权限。
(8)定义在类模板之外的成员函数就必须以关键字template开始,后接类模板参数列表。
(9)默认情况下,对于一个实例化了的类模板,其成员只有使用时才被实例化。
(10)在一个类模板的作用域内,我们可以直接使用模板名而不必指定模实参。
(11)与函数模板的不同之处是,编译器不能为类模板推断模板参数类型。
(12)类模板用来实例化类型,而一个实例化的类型总是包含模板参数。
(13)我们既可以在模板内部,也可以在模板外部为其定义成员函数,且定义的模板内成员函数被隐式声明为内联函数。
(14)模板类的成员本书是一个普通的函数,但是每个模板类都有其自己版本的成员函数。
(15)当一个类包含一个友元声明时,类与友元各自是否是模板是相互无关的。
(16)在新的标准中,我们可以将模板类型参数声明为友元:

 

template <typename Type> class Bar 
{
         friend Type;
};


(17)类模板的一个实例定义了一个类类型,与任何其他类类型一样,我们可以定义一个typedef来引用实例化的类。
(18)由于模板不是一个类型,所以我们不能用typedef引用一个模板。但是,新标准允许我们为类模板定义一个类型别名。
(19)与任何其他static数据类型成员相同,模板类的每个static数据成员必须有且仅有一个定义。
(21)与非模板类的静态成员相同,我们可以通过类类型对象来访问一个类模板的static成员,也可以使用作用域运算符直接访问成员。
(22)类似任何其他成员函数,一个static成员函数只有使用时才会实例化。

你可能感兴趣的:(C++,学习,语言,VC,C++Primer)