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 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...
随机推荐
- 使用NHibernate实现存储库
ORM框架不是存储库.存储库是一种架构模式,而ORM是将数据模型表示成对象模型的一种手段. 存储库可以使用ORM来协助充当领域模型和数据模型之间的中介. NHibernate允许在不损坏或只少量损坏领 ...
- 【ZOJ 3502】Contest
题 题意 n个问题,解决的顺序影响正确的概率,无论之前解决的问题是否答对,当前问题 j 答对概率为max{a[i][j]} (i为解决过的问题).求答对题目的最大期望和对应的答题顺序.T组测试,T ( ...
- Oracle自定义函数1
用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(value)函数,其中,value被称为参数.函数参数有3种类型. IN 参数类型:表示输入给函数的参数 ...
- 【poj1201】 Intervals
http://poj.org/problem?id=1201 (题目链接) 题意 给出n个区间${[ai,bi]}$,要求选出尽可能少的数,使得每个区间i中至少存在${c[i]}$个数. Soluti ...
- bzoj2096 pilots
依旧是维护两个单调队列,只是队首检查的方式略有变动 /*by SilverN*/ #include<iostream> #include<algorithm> #include ...
- jsp学习(五)
在进行jsp与jdbc连接时,出现这样一个错误,提示如下: java.net.ConnectException: Connection refused: connect 后来发现是由于mysql数据库 ...
- java连接mysql(一)
import java.sql.*; public class MysqlTest { public static void main(String[] args) throws SQLExcepti ...
- MyEclipse------文件字符输入,输出流读写信息
other.jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...
- [STL] lower_bound和upper_bound
STL中的每个算法都非常精妙, ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一 ...
- mysql join详解
下面是例子分析 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录如下: bID bNa ...