转自:http://www.cnblogs.com/msxh/p/5869992.html
自从Cocos2d-x3.0开始,Cocos2dx就正式的使用了C++11标准.C++11简洁方便的特性使程序的可拓展性和可维护性大大提高,也提高了代码的书写速度。
下面我们就来一起学习一下Cocos2d-x开发中那些不得不了解的C++11知识。
1.初始化列表
POD结构或者数组根据成员在结构内定义的顺序,可以使用初始化列表来进行初始化以简化代码。
struct StructA{ int a; int b; }; StructA sa={1,2};
在C++03中,非POD结构的类或者STL容器并不支持这种简便的写法,而C++11提供了强大的支持。使用std::initializer_list可以让类和普通函数使用初始化列表,并且STL容器也是可以使用初始化列表,代码如下:
//类使用初始化列表 class ClassA{ public: ClassA(std::initializer_list<int>list){} }; ClassA a = { 2,128); line-height:1.5!important">3 }; /*注意!使用std::initializer_list需要先include <initializer_list>头文件*/
STL标准容器使用初始化列表 vector<string> s = {"hello",0); line-height:1.5!important">C++11"};
可以看到在引入了std::initializer_list特性之后,初始化变量的工作简洁了许多,非常方便。
2.自动类型推导
类型推导可以在编译的时候自动来识别对象的类型,从而简化代码,更好的使用模版编程,使用auto关键字即可自动推导类型明确的变量,例如:
自动类型推导*/ vector<int> v; vector<int>::iterator it=v.begin(); 使用类型推导前 auto it2 = v.begin(); 使用类型推导后
decltype也可以根据已有的对象自动识别类型,但是它和auto的不同之处是:auto是自动推导出表达式右边的类型,而decltype是自动推导出任意一个变量的类型,并且可以用该类型来定义变量,说起来比较难理解,看下面的代码就一目了然了:
int num; decltype(num) b = 5;