C++ 编程进程中,有哪些常犯的坏习惯?
今天不发技术类的文章了,发一篇轻松愉快的,看看自己有没有被扫射!
命名空间。不用namespace。致使全局空间被污染。组织混乱带来保护障碍或使用不便。或完全依托前缀把名字起的老长,在树后面都能看见。2.代码一锅粥。不使用接口隔离实现/头文件设计不当。文件间依赖过度紧密难于分离。或过于疏松造成使用困难。和包括次序耦合带来的编译问题。3.预编译头失调。要末完全不用,造成编译慢;要末用的太多,在预编译头里“隐藏”了一些本该被include的定义,使功能在库外部没法使用。4.大清江山万万年。抵牾任何变化。谢绝使用c++11及更新的语言特性。即便编译器支持也不用auto,不用lambda表达式,不用override……把业务逻辑写得冗杂复杂。5.狂热者对c/c++盲目推重,对其它语言盲目贬低。如用性能差贬低C#和Java;如认为所有有GC的语言都是解释履行的/都是弱类型的/都是自动管理资源的。直到被piapia打脸。6.凭直觉优化不会或不爱使用性能分析手段。很多人你跟他谈结构不好,他开口闭口说“为了性能”跟你打嘴炮。然后你1问具体数据就变成了:我觉得会更快……7.爱SM党滥用内嵌汇编迷信其的效力和逼格。代价包括开发效力差,没法跨平台,不便浏览,没法享受编译器优化……常常只是把简单问题复杂化,复杂问题天书化。8.暗中破坏。不写或滥用防御代码。或不检查指针有效性。由函数依赖传入参数决定是不是崩溃。或用assert代替,崩溃后连日志输出都没有。发布后出了问题就抓瞎。或有检查,但失败后保持沉默,把问题隐患散布到其他地方。9.异常。对异常不了解也不想了解。或完全不用致使某些逻辑复杂。或混淆c++异常与操作系统异常。或随便catch并忽视异常。或没有对应防御机制造成内存泄漏/漏过初始化等问题。10.华丽的参数表。不对参数封装或抽象为对象。使得接口难用/易出错/无谓的参数copy。11.不加甄别的继承c遗产。如随便的类型转换/类型擦除/函数参数默认值/函数变参/滥用union代替转换函数等等。代码建立在过量的隐喻上。12.滥用const。过分强调使用const,近乎原教旨主义。绑架其他的接口也无谓提升复杂度。一点需求变更就引发散弹枪式的重构。13.闭门造车因懒得了解stl而造一些无聊的轮子。排序、搜索、数组、字符串……都单写一套。问题多,效力差,还不通用。14.永久的继承。从不组合。1说扩大功能就想到继承,乃至多重继承。把类型写得庞大臃肿。最后发现很难不动接口做任何改动。然后完蛋。15.四通八达。从不封装数据成员。并且喜欢直接访问静态成员或全局变量。飞线如乱麻。模块间高度耦合,数据变更失控。一有新需求就傻眼。16.写虚函数总是不会错滥用虚函数,宣传应一切皆虚。直到某天在构造函数里调了一下……17.多愁善感。从不画图,理由是觉得没必要/能想明白/不会画/习惯先写再画。结果就是业务逻辑混乱,代码层次模糊,对象生存期说不清楚。随便持有其他对象指针。总抱怨意料之外的事发生。18.酷爱吃糖滥用operator/模板/宏来打造语法糖。把简单代码写到器推导不出才满意。U:“怪我喽”最常见的是把经过运算的float直接和定值比较。出现问题怪CPU不靠谱,把他的数“算坏了”。rning是啥?认为能通过编译就大功告成了。然后埋一个如分支无返回值之类的雷到运行时。21.只要能用就好。分不清平台API/专属库与C/C++标准库。比如用MFC在win下写服务器。然后发现在Linux上没法编译部署。22.懒癌晚期懒得写或不会写测试。从不用代码测试代码,拿测试人员或用户当小白鼠。或把一段简陋的临时代码插到程序某处运行。第一次能跑就把测试删除了。23.性能1筋过度具象的盲目寻求“性能”。设计时言必提性能。茴字种写法全都为性能。高估函数调用开消。高估new/delete的开消。然后使用dowhile处理分枝。……把代码弄得像(友善度)。24.我最专一。只用一种技术/语言/平台。一切没听过的东西都不存在。25.甩手掌柜。基础问题不想了解。如不理解字符编码与传输格式的区分;如不知道各种调用约定的区分;如不知道结构成员对齐的含义(只有1字节对齐时期码才能工作)……其实就是懒得花几分钟看看书的事。26.金口玉言。代码从不重构。也不准他人动。当你指出某某行缺点,对方却说NN年都用过来了,肯定靠谱。27.卡牌:误导注释与代码对不上,命名与作用都不上,变量名与类型对不上。每次看到如“军衔”(rank)与“角色等级”(playerLevel)两个变量相比较时就想抽人。28.奇异的前缀。当你看到m_lprpglpmcCur时,会想到这事啥?会理解成当前的RPGLocalPlayerMotionController*吗?这缩写完全是把人搞昏。另外即便没有IDE提示,我也认为这东西一点用都没有。缩小变量作用范围才是更好的选择。29.到处都是坑不了解语言/库的特性却乱用。如算符优先级问题;如表达式取值次序问题;如不同版本vector实现差异问题;如临时对象做参数传递问题;……每天嚷着语言坑,其实(友善度)。30.大魔术师。如把栈上的char[]cast为某类型后,手动调构造/析构。玩平空造物。如在对象里克隆自己、干掉自己、再把新对象塞回自己的管理器里。玩金蝉脱壳。……
吓死宝宝了,赶忙来一杯程序员专用饮料压压惊!
作者:大狐狸
链接:
白癜风早期能治愈吗治疗白癜风的费用