码迷,mamicode.com
首页 > 编程语言 > 详细

C++编程优化心得(持续更新)

时间:2016-11-18 17:55:28      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:数据   bug   注释   对象   拷贝   依赖   绝对路径   中文编码   纯虚函数   

1. 对齐原则。比如64位总线,每次寻址读取8B。编程时注意变量地址,尽量消耗总线最少的寻址次数。堆内存申请时,系统严格按照对齐原则分配,故而使用时候也尽量不要跨寻址边界。

2. 需要的时候,可为了效率拷贝代码,虽然增加了代码体积,但这是值得的。尤其是for循环,若次数比较少,拆开亦无妨。

3. 位运算中,-1右移,左边补1,故仍为-1;-1左移,右边补0,故不再为-1。

4. 每次申请的堆内存,最好初始化,里面是垃圾数据,而并非为空。

5. 项目开发中,往往一个引擎对外暴露的是一个纯虚类,而其接口就是这个类的**指针变量。

6. 程序逻辑,重在语义。不能为代码的过分简单而减少函数的设计。

7. *&表示对指针的引用。

8. 类的静态方法不可调用其非静态方法,亦不可调用非静态成员变量。

9. 多文件编程时,头文件不可相互包含。

10. 头文件里尽量不要使用using namespace std;

11. static成员定义要放在cpp文件里面,而不是头文件里。

12. 纯虚类尽量不要延续两层以上。

13. include引用尽量都放在cpp文件里。

14. 子类继承父类,不可在构造函数里初始化父类并未在构造函数里初始化的成员,也就是说,子类构造函数里能初始化的成员,只有自己本身的和父类构造函数里的。

15. 项目开发中,对于一些依赖本地环境的参数,要写专门的配置文件,比如服务器地址。

16. 头文件里只声明,不定义。在头文件中,全局变量声明,必须加extern修饰;静态成员变量声明放在头文件,定义放在cpp文件,若是普通静态变量,最好声明和定义放在cpp,因为static作用域限于单文件,放在cpp里只对本文件可见,放在头文件会被所有引用该头文件的cpp拷贝一份完全相同的变量。

17. linux下,进行文件操作时,文件路径要采用绝对路径(相对路径很多时候会出bug),文件指针要对其返回值作判断,防止空指针。

18. debug状态下使用assert是极好的,不过记得发布版本前在#include <cassert>前加上#define NDEBUG,assert语句会被NDEBUG所影响。这里多嘴一句,错误与异常是不同的,异常是不可避免,在发布版本里不可或缺的,故而assert不能用于处理异常。注:在加上#define NDEBUG后,不论是调试还是运行,assert语句都会被直接忽略,故而平时开发时把#define NDEBUG注释掉,发布时再启用它。

19. 面向对象编程:可维护,可复用,可扩展,灵活性好。

20. 频繁使用的代码里,尽量少使用容器,因为其创建和回收的开销很大。

21. 字符串拼接效率:经过测试(http://bbs.csdn.net/topics/360000434和我自己项目中的实验),memcpy效率最高,string类的+=效率特别高,足以满足日常所需,而strcat效率很差,append也不快。

22. 基类中的虚函数要么实现,要么是纯虚函数(绝对不允许声明不实现,也不纯虚)。

23. 在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static。

24. 当多个线程访问同一个类静态方法时,若该方法里只操作栈上数据,则无妨,因为线程的栈是独立的;若该方法操作了非栈上的数据(比如堆、全局变量等),则需要互斥锁。

25. 内联函数,定义体要放在头文件,以保证每一个引用该头文件的cpp里都是完全相同的拷贝;inline关键字置于定义前,不必放在声明前;若定义在类内部,可不需要inline关键字。

26. vector执行clear时,会自动调用元素(如果是类的话)的析构函数。

27. 编程时,对变量(尤其是全局性质的变量或类)命名,要用解释性的,而不能用随意的j1,i1,n,m等名称,容易与库里的变量冲突。

28. 定义宏时,尽量多用整数,少用-1,-2之类,容易受uint和int不统一带来的困扰。

29. 函数形参采用默认值时,要写在声明里,而不写定义里,这样方便调用其头文件的cpp看得到默认值。

31. utf-8 中文编码 三个字节表示一个汉字

32. 项目开发时,使用条件编译:

#define DEBUG
main()
{
#ifdef DEBUG
    printf("Debugging\n");
#else
    printf("Not debugging\n");
#endif
    printf("Running\n");
}

发布版本时,注释掉第一行。这种方式要比开大量注释来得方便。

 

C++编程优化心得(持续更新)

标签:数据   bug   注释   对象   拷贝   依赖   绝对路径   中文编码   纯虚函数   

原文地址:http://www.cnblogs.com/jiu0821/p/5407389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!