原文在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++ 代码规范(译文)的更多相关文章

  1. JavaScript必备:Google发布的JS代码规范(转)

    [翻译]关于Google发布的JS代码规范,你需要了解什么? 翻译 | WhiteYin 译文 | https://github.com/WhiteYin/translation/issues/10 ...

  2. 引擎之旅 前传:C++代码规范

    自己以前写代码时,一个项目一个风格.单人开发的工作使得我并没有注意到代码规范性和可读性的问题.每当项目结束后,看到自己杂乱无章的代码,完全没有二次开发和重构的欲望. 写代码就应该像写诗一样优雅. by ...

  3. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  4. 谈谈PHP代码规范

    [转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...

  5. 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述

    对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...

  6. C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义

    类型判断符号: C#:object a;  if(a is int) { }  用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...

  7. 作业三: 代码规范、代码复审、PSP

    分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...

  8. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  9. C#代码规范

    C#代码规范  一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...

随机推荐

  1. Java-try-catch-finally

    try-catch语句还可以包括第三部分,就是finally子句.它表示无论是否出现异常,都应当执行的内容.try-catch-finally语句的一般语法形式为: try { // 可能会发生异常的 ...

  2. 图解Android - Android GUI 系统 (5) - Android的Event Input System

    Android的用户输入处理 Android的用户输入系统获取用户按键(或模拟按键)输入,分发给特定的模块(Framework或应用程序)进行处理,它涉及到以下一些模块: Input Reader: ...

  3. BZOJ3229 石子合并

    Description 在一个操场上摆放着一排N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 试设计一个算法,计算出将N堆石 ...

  4. groovy-实现接口

    Groovy提供了一些非常方便的方法来实现接口 使用闭包实现接口 只有一个方法的接口可以使用闭包来实现,例如 1 // a readable puts chars into a CharBuffer ...

  5. Spring学习8- SSH需要的jar包

    struts2 commons-logging-1.0.4.jar 主要用于日志处理 freemarker-2.3.8.jar 模板相关操作需要包 ognl-2.6.11.jar ognl表达示所需包 ...

  6. C# ServiceStack.Redis 操作对象List

    class Car { public Int32 Id { get; set; } public String Name { get; set; } static void Main(string[] ...

  7. matlab学习笔记 bsxfun函数

    matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下. ...

  8. localdb链接字符串

    <add name="GitCandyContext" connectionString="Data Source=(localdb)\v11.0;Integrat ...

  9. C/C++中的getline函数总结:

    来自:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html C/C++中的getline函数总结 getline函数是一个比较 ...

  10. php 开启curl,重启php-fpm服务

    1,找到php.ini配置 find / -name 'php.ini' /usr/local/php/etc/php.ini 找到extension=php_curl.dll 把前面的分号去掉即可. ...