标签:order sig 出现 继承 解决 执行 临时对象 静态函数 func
通常,每一个.cc 文件(C++的源文件)都有一个对应的.h 文件(头文件),也有一些例外,如单元测试代码和只包含 main()的.cc 文件。正确使用头文件可令代码在可读性、文件大小和性能上大为改观。
1. 内联函数
只有当函数只有 10 行甚至更少时才会将其定义为内联函数(inline function)。定义( Definition ):当函数被声明为内联函数之后,编译器可能会将其内联展开,无需按通常的函数调用机制调用内联函数。
优点:当函数体比较小的时候,内联该函数可以令目标代码更加高效。对于存取函数(accessor、mutator)以及其他一些比较短的关键执行函数。
缺点:滥用内联将导致程序变慢,内联有可能是目标代码量或增或减,这取决于被内联的函数的大小。
2.头文件依赖
使用前置声明(forward declarations)尽量减少.h 文件中#include 的数量。当一个头文件被包含的同时也引入了一项新的依赖 dependency,只要该头文件被修改,代码就要重新编译。如果头文件包含了其他头文件,这些头文件的任何改变也将导致那些包含了头文件的代码重新编译。因此,我们宁可尽量少包含头文件,尤其是那些包含在其他头文件中的。
3.函数参数顺序( n Function r Parameter Ordering )
定义函数时,参数顺序为:输入参数在前,输出参数在后。C/C++函数参数分为输入参数和输出参数两种,有时输入参数也会输出。输入参数一般传值或常数引用(const references),输出参数或输入/输出参数为非常数指针(non-const pointers)。对参数排序时,将所有输入参数置于输出参数之前。不要仅仅因为是新添加的参数,就将其置于最后,而应该依然置于输出参数之前。
4. 包含文件的名称及次序
包含次序标准化可增强可读性、避免隐藏依赖,次序如下: C 库、 C++库、其他库的.h、项目内的.h 。项目内头文件应按照项目源代码目录树结构排列,并且避免使用 UNIX 文件路径.(当前目录)和..(父目录)。
1. 命名空间( Namespaces )
在.cc 文件中,提倡使用不具名的命名空间(unnamed namespaces)。使用具名命名空间时,其名称可
基于项目或路径名称,不要使用 using 指示符。
2. 嵌套类( d Nested Class )
当公开嵌套类作为接口的一部分时,虽然可以直接将他们保持在全局作用域中,但将嵌套类的声明置于命名空间中是更好的选择。
3. 非成员函数( Nonmember )、静态成员函数( Static Member )和全局函数(Global Functions )
使用命名空间中的非成员函数或静态成员函数,尽量不要使用全局函数。
4.局部变量( l Local Variables )
将函数变量尽可能置于最小作用域内,在声明变量时将其初始化。C++允许在函数的任何位置声明变量。我们提倡在尽可能小的作用域中声明变量,离第一次使用越近越好。这使得代码易于阅读,易于定位变量的声明位置、变量类型和初始值。特别是,应使用初始化代替声明+赋值的方式。
5. 全局变量(Global Variables)
class 类型的全局变量是被禁止的,内建类型的全局变量是允许的,当然多线程代码中非常数全局变量也是被禁止的。永远不要使用函数返回值初始化全局变量。不幸的是,全局变量的构造函数、析构函数以及初始化操作的调用顺序只是被部分规定,每次生成有可能会有变化,从而导致难以发现的 bugs。因此,禁止使用 class 类型的全局变量(包括 STL 的 string, vector 等等),因为它们的初始化顺序有可能导致构造出现问题。内建类型和由内建类型构成的没有构造函数的结构体可以使用,如果你一定要使用 class 类型的全局变量,请使用单件模式(singletonpattern)。对于全局的字符串常量,使用 C 风格的字符串,而不要使用 STL 的字符串;
1. 构造函数( Constructor)
构造函数中只进行那些没有实际意义的,简单初始化对于程序执行没有实际的逻辑意义,因为成员变量的“有意义”的值大多不在构造函数中确定初始化,可能的话,使用 Init()方法集中初始化为有意义的(non-trivial)数据。
2.明确的构造函数(Explicit Constructors )
对单参数构造函数使用 C++关键字 explicit。定义:通常,只有一个参数的构造函数可被用于转换,例如,定义了 Foo::Foo(string name),当向需要传入一个 Foo 对象的函数传入一个字符串时,构造函数 Foo::Foo(string name)被调用并将该字符串转换为一个Foo临时对象传给调用函数。看上去很方便,但如果你并不希望如此通过转换生成一个新对象的话,麻烦也随之而来。为避免构造函数被调用造成隐式转换,可以将其声明为explicit。
3. 拷贝构造函数(Copy Constructors)
仅在代码中需要拷贝一个类对象的时候使用拷贝构造函数;不需要拷贝时应使用DISALLOW_COPY_AND_ASSIGN。
4. 结构体和类( Structs vs. Classes )
仅当只有数据时使用 struct,其它一概使用 class。在 C++中,关键字 struct 和 class 几乎含义等同,我们为其人为添加语义,以便为定义的数据类型合理选择使用哪个关键字。struct 被用在仅包含数据的消极对象(passive objects)上,可能包括有关联的常量,但没有存取数据成员之外的函数功能,而存取功能通过直接访问实现而无需方法调用,这儿提到的方法是指只用于处理数据成员的,如构造函数、析构函数、Initialize()、Reset()、Validate()。如果需要更多的函数功能,class 更适合,如果不确定的话,直接使用 class。
5.接口( Interface )
接口是指满足特定条件的类,这些类以 Interface 为后缀(非必需)。定义:当一个类满足以下要求时,称之为纯接口:
1) 只有纯虚函数("=0")和静态函数(下文提到的析构函数除外);
2) 没有非静态数据成员;
3) 没有定义任何构造函数。如果有,也不含参数,并且为 protected;
4) 如果是子类,也只能继承满足上述条件并以 Interface 为后缀的类。
(1)建立标准的缩进大小(四个空格),并一致地使用此标准。用规定的缩进对齐代码节。
(2)在发布源代码的硬拷贝版本时使用特定的字体以及字号(新宋体、小五号)。
(4)当有多层嵌套时,每一层嵌套都要有完整的{ }。
(5)为注释和代码建立最大的行长度,以避免不得不滚动源代码编辑器,并且可以提供整齐的硬拷贝表示形式。
(6)当一行内容太长而必须换行时,在后面换行代码中要使用缩进格式。每一行上放置的语句避免超过一条。特殊循环如for(i =0;i<100;i++)等除外。
HTML5 规范中规定了 HTML 标签是可以省略的。但从可读性来说,在开发的源文件中最好不要这样做,因为省略标签可能会导致一些问题。省略一些可选的标签确实使得页面大小减少,这很有用,尤其是对于一些大型网站来说。为了达到这一目的,我们可以在开发后期对页面进行压缩处理,在这个环节中这些可选的标签完全就可以省略掉了。
出于性能考虑,脚本异步加载很关键。一段脚本放置在 <head>
内,比如 <script src="main.js"></script>
,其加载会一直阻塞 DOM 解析,直至它完全地加载和执行完毕。这会造成页面显示的延迟。脚本引用写在 body 结束标签之前,并带上 async 属性。
根据元素(有时被错误地称作“标签”)其被创造出来时的初始意义来使用它。打个比方,用 heading 元素来定义头部标题,p 元素来定义文字段落,用 a 元素来定义链接锚点,等等。有根据有目的地使用 HTML 元素,对于可访问性、代码重用、代码效率来说意义重大。
对页面上的媒体而言,像图片、视频、canvas 动画等,要确保其有可替代的接入接口。图片文件我们可采用有意义的备选文本(alt),视频和音频文件我们可以为其加上说明文字或字幕。
<style>.no-good {}</style>
)<hr style="border-top: 5px solid black">
)<script>alert(‘no good‘)</script>
)<b>
, <u>
, <center>
, <font>
, <b>
)对于方法或属性,这些在类里面的统一采用,驼峰法命名,首字母小写,后面每个单词开头要大写,除了上面的private,等等要加相应的下划线。
对于函数或变量,这些在类外面的,统一采用小写字母,函数和变量要尽量详细,都是小写字母+下划线的组合。
对于花括号的换行,对于函数,方法,类这些主题部分,花括号都要重新换行写,在这些主题部分内部的花括号不换行,直接接到对应关键的后面
要让非内容信息污染了你的 HTML。现在貌似有一种倾向:通过 HTML 来解决设计问题,这是显然是不对的。HTML 就应该只关注内容。HTML 标签的目的,就是为了不断地展示内容信息。
img
元素当做专门用来做视觉设计的元素。在读《构建之法》第四章以前,我们对代码规范化的认识程度不够,以为代码是给机器看的,我们写出来就可以了。但读了这一章后,才明白,我们的代码也要让旁人看的清清楚楚。现在这个项目是我们两个人在做,就更不能自己做自己的,毫无交流。我们应该时刻保持联系,对相关代码的问题做及时沟通和处理,争取把代码写的简洁明了无二义性,这对我们的-项目进行有重大意义。
本项目立足于LZO 类型的文件解压缩。用户输入LZO类型的样本数据,本程序自动将样本换成图像输出,方便用户观察样本的各项数据,更容易把握样本的各种特征值,方便数据分析人员得出实验结论。
关于在完成该项目时的分工,我负责完成数据解压缩部分,肖洪波负责完成把解压缩的数据转换成图像输出。我们两个各占50%吧。
肖洪波的博客 :http://www.cnblogs.com/xiaohongbo/
标签:order sig 出现 继承 解决 执行 临时对象 静态函数 func
原文地址:http://www.cnblogs.com/zy66/p/7768541.html