首页 > 代码库 > [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表达式可以简化不少类似的代码,避免过多的回调函数。