c++ 11 新特性

因为了开始找工作了,原来的cocos2dx 2.x因为没有涉及到C++11,不免要熟悉下C++11.


一、lambda表达式

这个算是最明显的特征了,在写cocos2dx的时候就经常碰到只是为了调用一行代码而不得不去写一个函数,甚至一个类。

先看一个最简单的Lambda表达式

void LambdaTest::test1()
{
    auto fun = [](){std::cout<<"this is a basic lambda test"<<std::endl;};//定义一个最简单的Lambda表达式
    fun();
}


Lambda表达式的形式为[capture](parameters)mutable/exception->return value{body}最简形式如上例中的[](){};

capture的值可以是=(以值传递)&(引用传递)当前作用块中的值;以值传递时只有加上Mutable修饰之后才能在表达式中修改改值

则会报错。

capture还可以值为(a,&b),(a)(this)(=,&a)分别为a传值b引用,a传值,引用this中变量,除a引用其它都传值。

//
//  LambdaTest.cpp
//  cpp0x
//
//  Created by Enh. on 7/8/14.
//  Copyright (c) 2014 enh. All rights reserved.
//

#include "LambdaTest.h"
#include <iostream>
#include <vector>
#include <algorithm>
LambdaTest::LambdaTest()
: m_memberVaule(0)
{
    
}
void LambdaTest::test1()
{
    std::function<void()> fun = [](){std::cout<<"this is a basic lambda test"<<std::endl;};//定义一个最简单的Lambda表达式
    fun();
}

void LambdaTest::test2()
{
    int i = 0;
    auto fun0 = [=](){printf("read value i = %d\n",i);};
    fun0();
    auto fun1 = [i]()mutable{i++;std::cout<<"value i = "<<i<<" in lambda"<<std::endl;};
    fun1();
    std::cout<<"value i = "<<i<<" out lambda"<<std::endl;
    auto fun2 = [&](){i++;printf("value i = %d by use &\n",i);};
    fun2();
    auto fun3 = [this](){m_memberVaule++;printf("member value m_member = %d\n",this->m_memberVaule);};
    fun3();
}

typedef  int (*CALL_BACK_FUN)();
typedef void(*CALL_BACK_FUN0)();
void LambdaTest::test3()
{
    CALL_BACK_FUN fun = []()->int{printf("test 3\n");return 0;};
    std::function<int()> fun1 = fun;
    fun();
    fun1();
}

void LambdaTest::test4()
{
    std::vector<int> testVector = {1,2,3,4,5,6,7,8,9};
    for_each(testVector.begin(),testVector.end(),[=](int v){printf("value = %d\n",v);});
    
}

void LambdaTest::test5()
{
    std::function<void()> fun = std::bind(&LambdaTest::test1,this);
    fun();
    
}

待续



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值