cocos2d c++ 代码规范(译文)
原文在http://cocos2d-x.org/projects/cocos2d-x/wiki/Cocos2d_c++_coding_style,我觉得这个规范非常全面,写的非常好,我只捡一些我认为比较重要的翻译下,有错误的地方请指正,谢谢。
cocos2d c++ 代码规范
c++代码规范是基于Google c++代码规范的3.260版
头文件
通常,每个cpp文件应该有个关联的.h文件,当然也有些例外,例如单元测试和小的cpp直接包含在一个main函数里。
正确的头文件用法可以在可读性,大小,你代码的效率上产生很大的不同。
下面的规则可以引导你越过各种关于头文件的陷阱:
头文件守卫宏 (俗称宏卫兵)
所有的头文件应该有#define守卫以防止被多次包含,符号名字格式应该是 工程名_路径_文件_H。
为了确保唯一性,他们应该基于工程的完整的路径树,例如文件foo/src/bar/baz.h在foo工程中应该有如下的守卫宏
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif // FOO_BAR_BAZ_H_
前向声明
你可以前向声明一个普通的类以避免不必要的include
定义:
一个前向声明就是一个类,函数或模版的生命,没有相关联的定义。#include通常可以把那些被当作客户代码的符号用前向声明来代替。
结论:
当时要使用一个头文件里的函数时,那就直接包含那个头文件
当用类模板时最好包含他的头文件
当使用一个普通的类,使用前向声明没问题,但是当心那种前向声明可能不明确或者不正确时,或者有些怀疑时,那就直接包含适当的头文件。
不要把成员数据用指针代替以避免#include
通常直接包含那你需要的能提供声明或者定义的头文件;不要依赖那些过度的非直接包含过来的符号。有一个例外就是myfile.cpp可能依赖跟他相应的头文件myfile.h那里的#include和前向声明。(这句我翻译的我自己的都魔灵两颗)
内联函数
定义一个内敛函数当且仅当(^_^)他们很小,10行或者更少。
定义:
你可以让编译器用函数调用原理去展开他们而不是去调用他们的方式声明一个函数。
结论:
一个正统的规则就是如果他比10行还长久要不用内联,你要清楚析构通常比他们出现时长因为他们隐士的成员和基类的析构调用(我已经晕了)。
你必须知道函数并不总是内敛尽管它有可能满足以上条件。例如虚函数和递归函数通常不内敛。通常递归函数不内敛。把一个虚函数当成内敛那样定义在类内部的主要原因是既方便又可以注释他的行为,例如访问器和调整器(虚函数是不会被编译器当成内敛的)
原文内容有点多,今天先到这,以后慢慢补充。
cocos2d c++ 代码规范(译文)的更多相关文章
- JavaScript必备:Google发布的JS代码规范(转)
[翻译]关于Google发布的JS代码规范,你需要了解什么? 翻译 | WhiteYin 译文 | https://github.com/WhiteYin/translation/issues/10 ...
- 引擎之旅 前传:C++代码规范
自己以前写代码时,一个项目一个风格.单人开发的工作使得我并没有注意到代码规范性和可读性的问题.每当项目结束后,看到自己杂乱无章的代码,完全没有二次开发和重构的欲望. 写代码就应该像写诗一样优雅. by ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- 谈谈PHP代码规范
[转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...
- 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述
对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...
- 作业三: 代码规范、代码复审、PSP
分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...
- 转!!Java代码规范、格式化和checkstyle检查配置文档
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
- C#代码规范
C#代码规范 一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...
随机推荐
- poj 3669 线段树成段更新+区间合并
添加 lsum[ ] , rsum[ ] , msum[ ] 来记录从左到右的区间,从右到左的区间和最大的区间: #include<stdio.h> #define lson l,m,rt ...
- BZOJ-3225 立方体覆盖 线段树+扫描线+乱搞
看数据范围像是个暴力,而且理论复杂度似乎可行,然后被卡了两个点...然后来了个乱搞的线段树+扫描线.. 3225: [Sdoi2008]立方体覆盖 Time Limit: 2 Sec Memory L ...
- HDU-1394 Minimum Inversion Number 线段树+逆序对
仍旧在练习线段树中..这道题一开始没有完全理解搞了一上午,感到了自己的shabi.. Minimum Inversion Number Time Limit: 2000/1000 MS (Java/O ...
- 【uoj2】 NOI2014—起床困难综合症
http://uoj.ac/problem/2 (题目链接) 题意 给出n个操作包括And,or,xor,求从0~m中的一个数使得经过这些操作后得到的值最大. Solution 大水题..贪心由高到低 ...
- 微信支付(APP)集成时碰到的问题(.net提示“无权限”、iOS跳转到微信支付页面中间只有一个“确定”按钮)
直入主题之前,请容我吐槽一下微*的官方东西:ASDFQ%#$%$#$%^FG@#$%DSFQ#$%.......:吐槽玩了!大家心照就好. 要完成手机APP跳转到微信的APP进行微信支付,需要进行如下 ...
- Treap实现山寨set
treap插入.删除.查询时间复杂度均为O(logn) treap树中每个节点有两种权值:键值和该节点优先值 如果只看优先值,这棵树又是一个堆 treap有两种平衡方法:左旋&右旋 inser ...
- Android中调用百度地图
一.调用百度地图 --第一种方法 1.下载百度地图SDK SDK可以拆分下载,需要使用那一部分功能就下载相应包含的SDK,如下图 核心的的jar 和so包,放在工程中的libs目录下 2.申请key ...
- spark对于elasticsearch里的复杂类型支持
IP,直接在case class里用string, 可以考虑先用其它程序生成相关的mapping,然后再去用spark填充数据
- const 与 readonly的区别
首先先解释下什么是静态常量以及什么是动态常量. 静态常量是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值. 动态常量的值则是在运行的那一刻才获得的,编译器编译期间将其标示为只读常 ...
- HDOJ 1536 S-Nim
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...