从零单排c++ primer(21)

来源:互联网 发布:sql in语句 编辑:程序博客网 时间:2024/05/22 08:07

(1)可变参数函数通常是递归的:


                template <typename T, typename ...Args>                ostream &print(ostream &os , const T &t , const Args&... rest)                {                        os << t << "', ";                        return print(os , rest...);                }



(2)当定义可变参数版本的print时,非可变参数版本的声明必须在作用域中,否则,可变参数版本会无限递归。
(3)对于一个参数包,除了获取其大小外,我们能对它做的唯一的事情就是扩展。
(4)扩展中的模式会独立的应用于包中的每一个元素。
(5)当定义函数模板的特例化版本时,我们本质上接管了编译器的工作。特例化版本本质上是一个实例,而非函数名的一个重载版本。
(6)为了特例化一个模板,原模板的声明必须在作用域中,而且,在任何使用模板实例的代码之前,特例化版本的声明也必须在作用域中。
(7)如果一个程序使用一个特例化版本,而同时原模板的一个实例具有相同的模板参数集合,就会产生错误,但是这种错误编译器有无法发现。
(8)模板及其特例化版本应该声明在同一个头文件中,所有同名模板的声明应该放在前面,然后是这些模板的特例化版本。
(9)为了让Sales_data的用户能使用hash的特例化版本,我们应该在Sales_data的头文件中定义该特例化版本。
(10)我们只能部分特例化类模板,而不能部分特例化函数模板。可以只特例化成员函数而不是特例化整个模板。
(11)可以把tuple看做一个“快而随意”的数据结构。
(12)由于tuple定义了<和==运算符,我们可以将tuple序列传递给算法,并且可以在无序容器中将tuple作为关键字类型。
(13)编号从0开始的二进制位被称为地位,编号到31结束的二进制位被称为高位。
(14)可以从一个string或一个字符数组指针来初始化bitset。
(15)string的下标编号习惯与bitset恰好相反:string中下标最大的字符用来初始化bitset中的低位。
(16)bitset中的值不能放入给定类型中,则这两个操作会抛出一个overflow_error异常。
(17)正则表达式是一种描述序列的方法,是一种极其强大的计算工具。
(18)需要意识到的非常重要的一点是,一个正则表达式的语法是否正确是在运行时解析的。
(19)正则表达式中的模式通常包含一个或多个子表达式。一个子表达式是模式的一部分,本书也具有意义。
(20)子表达式的一个常见的用途是验证必须匹配特定格式的数据。
0 0
原创粉丝点击