Posts List

C++11:列表初始化

列表初始化的语法{ arg1, arg2, ... }非常直观,合理使用能简化代码以及增强可读性。 列表初始化的常用语法 直接列表初始化 语法 语义 T object { arg1, arg2, ... }; 对象构造 T { arg1, arg2, ... }; 临时对象构造 new T { arg1, arg2, ... } new构造对象 Class { T member { arg1, arg2, ... }; }; 成员直接初始化 Class::Class() : member{arg1, arg2, ...} {... 构造函数 ...

C++11:Range-based for loop

range-for 遍历一个range,对逐个元素做操作,比起之前的for循环,语法更简洁,可读性更高,同时引入range的概念大大提高适用范围。 语法 for ( range_declaration : range_expression ) loop_statement range_declaration 元素类型的命名变量声明,可以是原始类型,引用或auto声明 range_expression 表示范围的表达式,可以是原生数组 ...

C++11:模板显式实例化

模板显式实例化(extern template)可以用来确保模板只被编译器实例化一次,有两个好处: 这样使用模板生成的编译单元不会重复实例化,会加快编译速度,并减小编译单元的尺寸 如果模板类中包含静态成员对象,当这种模板类被多个动态库(如dll, ...

C++11:非静态成员的初始化

从C++11开始,类声明支持非静态成员的初始化,而在C++11之前,仅支持常整型静态成员初始化,新特征的支持,使得初始化变的灵活,很多时候可以减少代码量。 关于C++98的成员初始化 int var = 7; class X { static const int m1 = 7; // ok const int m2 = 7; // error: not static static int m3 = 7; // ...

C++11:decltype

decltype(expression)是一个标识符或者表达式的数据类型的推断,它可以用在变量声明中作为变量的数据类型。decltype类型说明符常常和auto关键字一起用于模板库的开发。 语法 decltype( expression ) 类型推断规则 如果 expression 参数是标识符或类成员访问 ...

C++11:override和final

从C++11开始,继承体系新增关键字override和final,让继承和成员函数覆盖更加规范和安全,在编译期做了保证。 override关键字 在成员函数的声明或定义中,override表示该成员方法是virtual的,并且是用来覆盖基类的虚 ...

C++11:Type Alias and Alias Template

Type alias is a name that refers to a previously defined type (similar to typedef), and alias template is a name that refers to a family of types. Syntax Alias declarations are block declarations with the following syntax: using identifier = type-id; template < template-parameter-list > using identifier = type-id; identifier - the name that is introduced by this declaration template-parameter-list - template parameter list, as in template declaration type-id - abstract declarator or any other valid type-id. For alias template declaration, type_id cannot directly or indirectly refer to identifier Explanation A type alias declaration introduces a name which can be used as a synonym for the type denoted by type-id. It does not introduce a new type and it cannot change the meaning of an existing type name. ...

C++11:多线程

C++11对多线程有了直接的支持,这对于跨平台的统一的线程管理和使用是个福音。 C++11多线程库提供了std::thread类,用于创建和管理线程,还为共享资源的竞态问题提供了互斥量(mutex)、锁、事件通知的条件变量(condition ...

C++11:variadic templates

本质上,变长模板参数(Variadic Templates)也是一种函数式编程中常用的列表模式匹配。 变长模板参数 变长模板参数是对原有C++模板的轻量级的扩展,增加了对…省略号的支持,即: 如果模板参数带…,那么该模板参数可以匹配0个或多个实参; ...

C++11:lambda

本文详细介绍下C++11的lambda表达式的语言特性。 lambda表达式总体特点: Lambda函数作为临时的函数,最常要数用于STL算法了,我们的很多STL算法可以指定一个函数参数,比如:accumulate, for_each, find_if, count_if, search, mismatch, sort等几十个算 ...