1、auto关键字
在C++11中,加入了auto关键字进行自动类型判断,省去了大量冗长的类型声明语句。当你用auto关键字时,编译器可以对你声明的变量进行自动推导。比如
auto a = 1;
这里就将a推导为int型。
而我们经常使用vector迭代器,如果不使用auto的话,就会比较繁琐,比如
std::vector<int> test_vec;
std::vector<int>::iterator itr = test_vec.iterator();
使用auto之后会简化代码,如下
std::vector<int> test_vec;
auto itr = test_vec.iterator();
auto可以在同个赋值语句声明多个变量,不过类型必须相同。否则编译会出错。同时,不能声明auto数组,std::vector<auto>或者类似也不被允许。
2、匿名函数
lambda函数也称lambda表达式,是一个可以接收任意多个参数并且返回单个表达式值的函数。
举个例子:
int add(int a, int b)
{
return a + b;
}
利用lambda表达式我们可以这样写:
auto fun = [](int a, int b){return a + b;};
fun(); // call the function
其中[]表示接下来开始定义 lambda函数,后面的()填写的是lambda函数的参数列表,{}就是函数体。我们也可以显示地指定lambda函数的返回类型,比如:
[] () -> int { return 1; }
说以总的说lambda函数形式为:
[captures] (params) -> ret { statments; }
在cocos2d-x 3.0如何使用lambda函数呢,看下面例子:
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
void HelloWorld::menuCloseCallback(Object* sender)
{ ... }
使用lambda函数后,
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
[](Object* sender)
{
... ;// fun
});