C++11新特性之自动类型判断以及匿名函数

本文介绍了C++11中的两个重要新特性:auto关键字和lambda函数。auto关键字简化了类型声明,使得代码更加简洁。lambda函数则允许快速定义简单的匿名函数,提高编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 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
                      }); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值