最近由于公司部门调整,博主被安排去做游戏开发了,使用的是cocos2d游戏引擎,开发语言为C++。所以硬着头皮边熟悉cocos2d边学C++。对于写了多年Java的来说,看C++代码很坑爹有木有。
但是作为Android工程师,C/C++还是有必要学的,因为Android系统源码大部分都是C写的。之前看过一段时间的Android源码,看到C++部分也是比较吃力,现在借此机会学学C++也是挺不错的。
下面简单记录在学习C++过程中遇到的一些不懂的东西(持续更新)。
std::nothrow
在内存不足时,new (std::nothrow)并不抛出异常,而是将指针置NULL。
如:auto layer = new (std::nothrow) FirstLayer();
auto
auto是C++11的新特性,自动类型推断,用于从初始化表达式中推断出变量的数据类型,有点类似于js中的弱类型var。
#pragma once
只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。但是是依赖编译器的,可以使用宏定义#ifndef
#ifndef,#define,#endif
C/C++语言中的宏定义,通过宏定义避免文件多次编译
#if与if的区别
#endif//与#if对应
作为一个编译“开关”,比如:
#if(条件满足)
执行代码1
#else
执行代码2
#endif
假如编译时,确实满足条件,则生成的程序文件(.exe文件)中不会有执行代码2的。如果用普通if语句,生成的程序文件就会 有执行代码2,这个区别看看生成文件大小就可以知道。如果你的条件在程序编译前就已经确定了,那就用#if;如果条件需要在程序运行过程中才能判断,则用 if。
static_cast
用法:static_cast < type-id > ( expression )
该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。有点类似于Java中的强制转换。
string与int拼接
1、stringstream拼接string与int
stringstream ss;
ss << "old:"<< GameOverScene::goldNum << ",distance:" << GameOverScene::distance;
LabelTTF* goldAndDistanceLabel = LabelTTF::create(ss.str(), "Arial", 30);
2、sprintf函数
char countBuf[16] = "";
sprintf(countBuf, "distance:%d", mDistance);
3、std::to_string函数
string s = "run0" + std::to_string(i) + ".png";
安卓没有to_string这个函数,eclipse中编译出错,为了跨平台,尽量使用stringstream或者sprintf