Cocos2dx是用C++11编写的,由于之前工作中并没有用到这部分。这里对C++11新特性在Cocos2dx中使用较多的地方做一下归纳。

C++11FAQ:http://www.stroustrup.com/C++11FAQ.html

一、新的关键字及语法

nullptr:用来代替NULL,nullptr是强类型,防止出现一些二义性

void f(int); //#1
void f(char *);//#2
//C++03
f(0); //二义性
//C++11
f(nullptr) //无二义性,调用f(char*)

auto:根据上下文自动类型推导,(在使用STL时非常方便), (decltype与此相反,从变量或表达式中获取类型)

bool AppDelegate::applicationDidFinishLaunching() {// initialize directorauto director = Director::getInstance();              // Director*auto glview = director->getOpenGLView();              // GLView*...
}

override:派生类重写基类的虚函数时,在函数的声明中加上override(非必须), 这样可在编译时检测出对基类函数的错误重写

struct B {virtual void f();virtual void g() const;virtual void h(char);void k();          // not virtual
};
struct D : B {void f() override;    // OK: overrides B::f()void g() override;   // error: wrong typevirtual void h(char);   // overrides B::h(); likely warningvoid k() override;   // error: B::k() is not virtual
};

final:可用来修饰基类的虚函数,表示该函数不可被派生类重写即override

struct B {virtual void f() const final;  // do not overridevirtual void g();
};struct D : B {void f() const;     // error: D::f attempts to override final B::fvoid g();     // OK
};

range for:只要定义了begin(), end()即有iterator

void f(vector<double>& v)
{for (auto x : v) cout << x << '\n';for (auto& x : v) ++x;  // using a reference to allow us to change the value
}

lambad表达式:主要应用时标书某些具有简单行为的函数,(cocos2dxz中常用)

auto onTouchEvent = [&](EventListener* l) -> bool { // Return true to breakEventListenerTouchOneByOne* listener = static_cast<EventListenerTouchOneByOne*>(l);// Skip if the listener was removed.if (!listener->_isRegistered)return false;event->setCurrentTarget(listener->_node);...
}

二、标准库

1.std::function与std::bind

std::function :可以定义类似函数指针的类型

std:bind:可以方便的绑定类的成员函数

这个常在cocos2dx中的回调函数中使用

    std::function<void(const std::vector<Touch*>&, Event*)> onTouchesBegan;std::function<void(const std::vector<Touch*>&, Event*)> onTouchesMoved;std::function<void(const std::vector<Touch*>&, Event*)> onTouchesEnded;std::function<void(const std::vector<Touch*>&, Event*)> onTouchesCancelled;
// new callbacks based on C++11
#define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)
#define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
#define CC_CALLBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
#define CC_CALLBACK_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ##__VA_ARGS__)

2.std::thread

Cocos2dx引擎的核心仍然是一个单线程的死循环(UI线程),在处理一些比较耗时的工作,如网络通信,纹理资源,音视频资源等,为防止界面出现卡顿,最好还是另开线程(Worker线程)。而在3.2的版本中并未发现pthread的支持,原来是C++11的标准库中已经有了std::thread。下面给出一个简单示例:

bool HelloWorld::init()
{if ( !Layer::init() ){return false;}std::thread t1(&HelloWorld::myThread,this);//创建一个分支线程,回调到myThread函数里t1.join();
//t1.detach();log("in major thread");//在主线程return true;
}void HelloWorld::myThread()
{log("in my thread");
}

C++11中还有很多其他的新特性,如右值引用与move语义,std::move,无序容器(unordered_map...), 初始化列表等;想更深入的了解请查看c++11FAQ

如有错误欢迎指出,希望与Cocos2dx爱好者们多多交流

Cocos2dx3.2学习准备(一):C++11新特性相关推荐

  1. IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍

    文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...

  2. Java 11 新特性

    2019独角兽企业重金招聘Python工程师标准>>> Java 11 新特性 转载于:https://my.oschina.net/u/3764794/blog/2993127

  3. C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)

    2019独角兽企业重金招聘Python工程师标准>>> C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一) 首先,让我们来看看以&方式进行变量捕获,同样没有参 ...

  4. C++11 新特性之std::thread

    C++11 新特性之std::thread 原文:https://blog.csdn.net/oyoung_2012/article/details/78958274 从C++11开始,C++标准库已 ...

  5. C++11新特性之新类型与初始化

    C++11新特性之新类型与初始化 snoone | 2016-06-23 11:57    浏览量(148)    评论(0)   推荐(0) 数据 这是C++11新特性介绍的第一部分,比较简单易懂, ...

  6. Java 11新特性解读

    概述 美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用!这是自 Java 8 后的首个长期支持版本,将支持到2026年,可以使用下面的 ...

  7. C++11新特性decltype

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105042574 C ...

  8. 深入浅出之C++11新特性

    1. auto类型赋予新含义 1.1 auto类型定义 在之前的 C++ 版本中,auto 关键字用来指明变量的存储类型,它和 static 关键字是相对的.auto 表示变量是自动存储的,这也是编译 ...

  9. 《深入理解C++11:C++ 11新特性解析与应用》——导读

    前 言 为什么要写这本书 相比其他语言的频繁更新,C++语言标准已经有十多年没有真正更新过了.而上一次标准制定,正是面向对象概念开始盛行的时候.较之基于过程的编程语言,基于面向对象.泛型编程等概念的C ...

  10. C++11 新特性简介

    1.auto auto是旧关键字,在C++11之前,auto用来声明自动变量,表明变量存储在栈,很少使用.在C++11中被赋予了新的含义和作用,用于类型推断. auto关键字主要有两种用途:一是在变量 ...

最新文章

  1. 一文告诉你,NIPS 2017有多火爆 | 附PPT、视频、代码大总结
  2. mysql脚本mysql_safe解释、mysql.sock文件、mysql_install_db
  3. UVA227-Puzzle
  4. MongoDB数据库(了解MongoDB及基础命令,备份数据库)
  5. Devexpress xaf针对某个用户登录后在面板中设置导航无效的解决方法
  6. 微信朋友圈也可以发语音你们造吗?
  7. 工商银行黄金开户问答题答案
  8. ITester软件测试小栈长期持续在线征集
  9. cron java_cron表达式
  10. iostream, istream 和 ostream的区别
  11. 解析RocketMQ的消息索引文件consumequeue
  12. 史上最全的主流CPU性能排名
  13. 2021【第十二届蓝桥杯省赛】 C/C++ B组(第一场)
  14. Git创建本地分支并关联远程分支(一)
  15. javascript常用函数大全
  16. 千锋重庆IT学习之微信API接口文档
  17. 12项目管理--项目采购管理
  18. dnw linux 内核,神器DNW2 FOR LINUX!
  19. S7-1200PLC 与温控仪表Modbus RTU通信
  20. PhotoShop学习篇

热门文章

  1. INCA车载ECU工具软件简介
  2. Android常用设置
  3. Learn Git Branching 学习笔记(Git 技术、技巧与贴士集合篇)
  4. 【前端】微信小程序 内容安全图片校验API imgSecCheck 代码示例 图片违规校验
  5. 3. Python脚本学习笔记三字符串
  6. Java代理(静态代理、JDK动态代理、CGLIB动态代理)
  7. 在计算机中NIC是什么意思?
  8. 麦吉尔学和ubc计算机专业,申请多伦多、UBC和麦吉尔三所大学建筑专业的作品集要求...
  9. 推荐一款非常好用的鼠标手势软件StrokeIt
  10. 谷歌I/O大会发布语言模型LaMDA2,以及更多打开想象力的落地应用