【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

对于我这样一个C语言的程序员来说,编写C++的机会其实不太多。但是我还是比较喜欢写C++语言,原因主要有几个方面:(1)自己学C++语言的时间比较长了,也比较了解,如果从大一的时候算起,现在也有小十年了;(2)windows下面的开发工具确实很好用,比如调试器调用、汇编代码查看也方便,学起来其实没有什么障碍;(3)基于C++语言的开源项目还是比较多的,比如说的eMule、webkit、notepad++、libsvm,掌握好C++语言对自己的帮助还是挺大的。

和很多朋友一样,我自己的C++学习也是非常曲折的,这其中主要有下面几个阶段。刚开始,在大一刚刚入学的时候,我们集中学习了C++的基本语法,其实我也不清楚为什么要在大学设置C++这门这么难的语言,其实对于很多工科的同学来说,C语言已经是绰绰有余了,况且能把C语言学好本身就已经很不错了。后面,随着C++的了解,我开始用MFC编写一些小程序,什么串口工具、聊天工具、FTP下载工具、图像处理工具等等,这个时候看得比较多的就是侯捷的《深入浅出MFC》。当然后来随着MFC使用的频繁,对C++语言的了解也更加深入,这个时候更多地关注C++语言的实现细节,什么《Effective C++》、《C++ Template》、《Inside the C++ object》、《Effective STL》,此时恨不得不自己会的所有技巧都用上,充分发挥C++的特性。等到工作之后,由于工作的关系更加偏重于实时操作系统,自己对编程语言有了新的认识,不再盲目追求语言的特性,而是更注重系统的稳定、项目的开发进度和语言本身的简洁和高效。无疑,在这些要求下面,C语言就是最佳的选择,因为你可以清楚地了解每一行语句后面CPU都帮我们做了些什么。我看过的很多操作系统代码,比如ucos、rt-thread、linux、vxworks都是用C语言编写的,很简洁也很高效。

网上有位知名的朋友叫云风,早期在他写的书《我的编程感悟》当中也是对C++大加褒奖,可是在后来的工程实践中反而感觉到C语言才是最好用的语言。相信很多的朋友都有类似的经验。当然,不可否认C++还是存在很大的市场,但是它的应用范围和过去相比,确实是大大缩小了。一方面,精通C++的人实在是太少了,用好C++的人更是凤毛麟角;另外一方面,C++的学习代价、应用代价实在是很高,你没有办法要求项目组里边的每个人都有很高的C++应用水平,这是没有办法做到的,就算做到了,代价是十分昂贵的。所以,为了消除彼此成员之间的差别,很多时候C++的编程规范就变成了C语言的编程规范,这可以从google C++ style guide可以看出来。

所以,今天这里写这篇文章,主要是就C++写一些自己的总结,谈谈自己的看法,欢迎各位提出宝贵意见。

(1) 总则

a)尽量选择所有编译器都支持的C++标准

b)必须了解类的内存分布结构

c)必须了解编译器对C++的隐形操作

d)指针是所有错误的来源,尽量用引用代替

e)用const对入参、出参和类函数进行限制

f)多用namespace限定类的作用范围

g)少用C++的高级特性

h)时刻在需要处理C文件的时候添加extern “C”

i)string类是万恶之源,尽量少用

(2)头文件

a)定义头文件的时候首先添加编译宏

b)添加最少的头文件依赖

c)头文件名争取和类名一致

d)头文件中只包括类型定义、宏定义和函数声明

e)类的头文件和实现文件一一对应

(3)命名

a)类的命名按照首字母大写的格式进行,比如Parent

b)宏按照全大写的格式进行,比如MAX

c)函数按照小写进行,中间用连词号连接,比如get_max_number

d)变量按照一个单词进行,比如number,index等等

e)变量、函数多用static限定范围,类多用namespace限定范围

(4)函数

a)杜绝可变参的函数,不利于编译器检查

b)少用全局函数

c)函数入参多用引用类型

d)返回值多用引用类型,但是临时变量不能用引用

e)全局函数少用重载,最好不用

f)最好不用使用模板函数,即使使用也只限定于自己使用

(5)类

a)少用继承,多用组合

b)对于构造函数,多用explicit,防止编译器强行转换

c)对于指针成员变量,务必注意拷贝构造函数和赋值函数的编写

d)对于类指针,为了防止内存泄漏或者资源重复释放,最好自己管理,不要相信智能指针

e)继承类中的析构函数要定义为virtual类型

f)构造函数要简单,复杂的资源分配请在类成员函数init中定义

g)对于全局类变量,相互定义之间不要存在依赖

h)严格区分类指针的释放,注意delete和delete[]的区别

i)对于类中锁的问题,可以利用类的构造、析构、引用特性解决

j)多用class,少用struct

(6)类的高级特性

a)不要使用算术符重载

b)不要用模板,除非自己用,自己用也要少用

c)不用使用C++中的typeid属性

d)不要用异常

e)不要用virtual继承

f)不要用多类继承

g)不用要stl,当类中存在指针变量的时候,stl很多时候是搞不定的,而vector、list、find、sort你是搞得定的

随想录(写给自己的C++编程规范)相关推荐

  1. 编程规范及程序员的自我修养

    本文重点解决如下问题:什么样的代码是好的代码,什么样的程序员是优秀的程序员? 先看图 4 3(a)中的代码,你能明白这段代码要做什么事情吗?再看图 4 3(b)中的代码,你可以知道这段代码在做什么吗? ...

  2. 编程规范 写 if 语句不要任性

    在之前的文章编程规范_这个星球上最好的C编程风格中,介绍了猿届的辟邪剑谱,哦不,是独孤九剑,Google C++ Style Guide.编程规范而已,用不着自宫.为了方便大家,我也专门挑出了C语言相 ...

  3. “类的使用”编程规范(一)覆写(重写)、重载、隐藏、遮蔽、遮掩

    "类的使用"编程规范(一) 1调用静态方法的注意事项 当子类继承父类的静态方法时,如果直接用实例来调用就会将子类中的静态方法隐藏,结果显示为父类的静态方法. package Tas ...

  4. Windows客户端C/C++编程规范“建议”——前言

    前言 工作中接触了很多编程规范.其中最有意思的是,公司最近发布了一版C/C++编程规范,然后我看到该规范的最后一段时,有这么一句:"该规范不适用于Windows平台开发".看来这份 ...

  5. Python编程规范及性能优化

    为什么80%的码农都做不了架构师?>>>    Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器 ...

  6. 【ES6】ES6编程规范 编程风格

    [ES6]ES6编程规范 编程风格 一.定义变量的规范 二.字符串 三.对象 四.数组 五.函数 查看更多ES6教学文章: 参考文献 引言:这是ES6系列教学的最后一篇.我们讲解一下ES6编程的规范. ...

  7. iOS代码编程规范 根据项目经验汇总

    带出几十位从零开始学iOS的实习生或试用期的开发人员后,觉得真的是千人千面,每个人写的代码都风格迥异,如果没有一个文档规范,每次都和新人进行口头的说教,大概自己是不用敲代码了,所以吃了亏了就开始编写i ...

  8. 简明 Python 编程规范

    本文最初发表于赖勇浩(恋花蝶)的博客:http://blog.csdn.net/lanphaday,如蒙转载,必须保留全文完整,未经本人同意,不得用于商业目的.51Testing软件测试网 Lfh g ...

  9. 简明 Python 编程规范v2

    赖勇浩(http://laiyonghao.com) 注:之前发布一篇<简明 Python 编程规范>(见:http://blog.csdn.net/lanphaday/article/d ...

最新文章

  1. 第一章·MySQL介绍及安装
  2. cocos2dx 制作单机麻将(二)
  3. 客户端控件调用服务器的参数
  4. 10个实战及面试常用Linux Shell脚本编写
  5. 转:Mac文件权限操作详细记录
  6. Linux下网络测试工具tcpping、tcptraceroute的使用
  7. 中国光伏如何规避产业风险?
  8. android显示新界面,Android 12首个预览版发布 新界面新功能来袭
  9. 华为手机连接电脑,无法使用USB调试或者无USB连接弹窗的问题
  10. 雷观(十八):我的世界观
  11. 浏览器无法访问此网站该如何处理?
  12. 【OSX】MAC下能用的炒股软件
  13. Bridging the Gap Between Anchor-based and Anchor-free Detection
  14. Java 小白 设计加油站类和汽车类,加油站提供一个给车加油的方法,参数为剩余汽油数量。每次执行加油方法,汽车的剩余数量都会加2
  15. 新媒体运营教程:直播间高转化活动如何策划!
  16. Ubuntu-离线安装基本依赖(gcc、make、dkms等)
  17. mac运行ps特别慢_Mac Mac运行越来越慢?变卡顿?试试看这些加快小诀窍!
  18. 【集成学习系列教程5】LightGBM
  19. SECS/GEM使用
  20. android录音波浪动画_Android 自定义波浪动画--让进度浪起来~

热门文章

  1. DMA—直接存储区访问
  2. MongoDB,还有一个角度看数据
  3. hdu1243 dp (类最长公共子序列)
  4. 使用perl连接oracle数据库
  5. Ubuntu8.10安装小记
  6. vector容器的end是指向最后一个元素的下一个位置,使用时要将迭代器减1,才能获取到最后一个
  7. Unity 如何修改 particle system 的 start color 属性
  8. shell下如何删除文件的某一列
  9. REST架构中的HTTP动词
  10. 面试题:判断字符串是否回文