posted @ 2017-10-05 00:06
随笔分类 - 深入应用C++11
优化代码与工程级应用
摘要:1. 初始化列表的实现 (1)当编译器看到{t1,t2…tn}时便会生成一个initializer_list<T>对象(其中的T为元素的类型),它关联到一个array<T,n>。 (2)对于聚合类型,编译器会将array<T,n>内的元素逐一分解并赋值给被初始化的对象。这相当于为该对象每个字段分别赋
阅读全文
摘要:1. 统一初始化(Uniform Initialization) (1)在C++11之前,很多程序员特别是初学者对如何初始化一个变量或对象的问题很容易出现困惑。因为可以用小括号、大括号或赋值操作符等多种方式进行初始化。 (2)基于这个原因,C++11引入了“统一初始化”的概念。这意味着我们可以使用{
阅读全文
posted @ 2017-10-04 21:34
摘要:1. 模板模板参数 (Template template parameter) (1)模板模板参数:即模板的参数也是一个模板。 (2)声明格式形如: 2. 模板模板参数的实参匹配 (1)实参与Container模板的参数必须完全匹配 (2)当不需要使用模板参数时,参数名可以省略不写。如 templa
阅读全文
posted @ 2017-10-04 10:51
摘要:1. 右尖括号的问题 (1)在实例化模板时,会出现两个连续右尖括号(>>),如: ①vector<list<int> >; //注意,两个右尖括号之间有空格。C++98/03/11均支持 ②vector<list<int>>; //c++11开始支持这种写法!在C++98/03将连写的>>当成右移操
阅读全文
posted @ 2017-10-02 23:57
摘要:1. 追踪返回类型的引入 (1)经典问题:泛型编程中的返回值类型(被迫引入了返回值类型R作为模板参数) (2)decltype的尴尬 (3)不完美的解决方案——写法过于晦涩难懂。 2. 返回类型后置(trailing-return-type, 又称为追踪返回类型) (1)利用追踪返回类型进行的等价函
阅读全文
posted @ 2017-06-03 17:51
摘要:1. decltype关键字 (1)auto所修饰的变量必须被初始化,编译器才能通过初始化来确定auto所代表的类型,即必须先定义变量。 (2)decltype可以在编译期推导出一个变量或表达式的结果类型(但不会真正计算表达式的值),并且使用这个结果定义新的变量。 【实例分析】获取表达式的类型 //
阅读全文
posted @ 2017-06-02 08:20
摘要:1. auto关键字 (1)auto的作用是让编译器自动推断变量的类型,而不需要显式指定类型。这种隐式类型的推导发生在编译期。 (2)auto并不能代表实际的类型声明,只是一个类型声明的“占位符” (3)auto声明的变量必须马上初始化,以让编译器推断出它的实际类型。 【编程实验】auto的基本用法
阅读全文
posted @ 2017-05-23 13:36