首页 > 代码库 > [cocos2d-x] 一些C++ 11新特性的引入
[cocos2d-x] 一些C++ 11新特性的引入
1.auto关键字的使用
auto关键字原理
在定义变量的时候必须申明类型,c++是强语言类型,在编译阶段需要知道类型,这样的好处是程序效率更高,而动态语言不需要类型申明的需要自推导变量类型。使用了auto是不是c++效率会变慢?完全不是,因为在编译阶段编译器已经帮程序员推导好了变量的类型。前提条件是编译器可以根据当前的程序的状态推导出变量类型。只是编译器更加智能,可能会增加编译工作,但是不会影响运行效率。
实例1:申明普通变量
auto num = 10;
实例2:
vector<string> str_vec;
vector<string>::iterator it_old = str_vec.begin();
auto it_new = str_vec.begin();
实例3:
auto uiLayer = Layer::create();
可以简化我们的编程。
auto使用需要注意的几个问题
1、使用auto关键字的变量必须有初始值,编译器才能推导出变量类型。
2、在传递const变量的时候,使用auto必须自己加const
2.lambda表达式的使用
实例:
常规写法
bool compare(int & a, int & b)
{
return a > b; // 降序排序
}
sort(a, a+n, compare);
使用表达式:
sort(a, a + n, [](int a, int b){return a > b;}); // 降序排序
实例:
auto data = http://www.mamicode.com/armature->getAnimation()->getMovementData();
float speed = data->scale;
float frames = data->duration;
float delay = frames/60/speed;
string id = FORMAT_TEXT( "%p", armature );
Director::getInstance()->getScheduler()->schedule( [armature](float t){armature->removeFromParent();},this,0,0,delay,false, id);
使用lambda表达式可以简化不少类似的代码,避免过多的回调函数。