1.C++11常用特性介绍 从本篇开始介绍C++11常用特性,大致分:关键字及新语法.STL容器.多线程.智能指针内存管理,最后讲一下std::bind和std::function 二.关键字和新语法 1)auto类型修饰符,可以根据初始化代码的内容自动判断变量的类型,而不是显式的指定,如: auto a = 1; auto b = 'A'; 由于1的类型是int,所以a的类型就是int:同样由于'A'的类型是char,所以b的类型是char. 如果只是将auto用在变量声明,那将是毫无意义的,…
一.C++11采用配对的方括号[]来创建一个匿名函数并执行,如: #include <iostream> int main() { auto func = []{ std::cout << "hello world!!!" << std::endl; }; func(); } 捕获选项: 1)[]:不捕获任何变量(没有使用任何函数对象参数). 2)[=]:拷贝捕获(函数体内可以使用Lambda所在作用范围内所有可见局部变量,包括Lambda所在类的t…
std::array是具有固定大小的数组,支持快速随机访问,不能添加或删除元素,定义于头文件<array>中. 一.概要 array是C++11新引入的容器类型,与内置数组相比,array是一种更容易使用,更加安全的数组类型,可替代内置数组,作为数组升级版,继承数组最本特性,同时融入部分操作. 二.定义与初始化 array和数组一样,为固定大小容器类型,定义时即需声明大小与类型 1)内置数组初始化 int array[10] = {0}; int array[10] = {1,2,3,4,5,…
一.decltype的意义 有时我们只想从表达式的类型推断出要定义的变量类型,但是不想用其值进行初始化的时候,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值. 二.decltype的用法 1)基本用法 int getInt(); int main() { int a = 1; decltype(a) b;   //b为int类型. decltype(getInt()) c; //c为int…
一.列表初始化 1)C++11以前,定义初始化的几种不同形式,如下: int data = 0;   //赋值初始化 int data = {0};   //花括号初始化 int data(0); //构造初始化 2)C++11以旧语法中花括号初始化形式为基础,设计了列表初始化语法,统一了不同的初始化形式 a)数据类型 变量{初始化列表} //聚合类型 struct Persion { char name[64]; struct Date//成员是聚合类型 { int year; int mon…
一.for循环新用法——基于范围的for循环 for(元素类型 元素对象 : 容器对象) { //遍历 } 1)遍历字符串 std::string str = "hello world"; for(auto ch : str) { std::cout << ch << std::endl; } 2)遍历数组 int arr[] = {1,2,3,4,5}; for(auto i : arr) { std::cout << i << std…
一.左值.右值 1)左值:可以放在赋值号左侧.可以被赋值的值:左值必须要在内存中有实体. 2)右值:必须放在赋值号右侧.取出值赋值给其它变量:右值可以在内存中也可以在CPU寄存器中. 二.引用 引用是C++语法做优化,引用的本质还是靠指针来实现的,引用相当于变量的别名. 声明引用的时候必须初始化,且一旦绑定,不能对引用重定义,对引用的一切操作,相当于对原对象的操作. 三.左值引用 C++11之前,没有左值引用和右值引用之分,引用专指左值引用 左值引用的基本语法:type & 引用名 = 左值表达…
一.constexpr变量 1)将变量声明为constexpr类型以便由编译器来验证变量的值是否为一个常量表达式,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来初始化,如: int a = 10; constexpr b = a + 10;//错误,需要将a声明为const int常量. 2)const与constexpr之间的区别 a)const所定义的变量,一经初始化便不能修改,但是不要求const所定义变量在编译的时候就能被算出. b)constexpr定义的变量要求…
一.nullptr关键字及用法 1)NULL的二义性 void func(int) {} void func(int*) {} 当函数调用func(NULL)时会执行哪个函数呢? 先看C++对NULL的定义: #if defined(__cplusplus) # define NULL 0 /* C++中使用0作为NULL的值 */ #else # define NULL ((void *)0)   /* C中使用((void *)0)作为NULL的值 */ #endif 我们可以看到C++的N…
一. auto简介编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型.和原来那些只对应某种特定的类型说明符(例如 int)不同.auto 让编译器通过初始值来进行类型推演.从而获得定义变量的类型,所以说 auto 定义的变量必须有初始值.    //由val_1 和val_2相加的结果可以推断出i…