很多小伙伴都老是会碰到疑问,其实还是基础没打扎实,这些题如果你不看答案你能知道多少呢?如果还有很多不知道就证明基础没打扎实,如果你还在入门纠结,如果你还在苦恼怎么入门!小编有个建议,可以加小编弄的一个C语言交流基地,大家可以进入交流基地:379249575,里面新手入门资料,可以说从零到项目实战,都是可以免费获取的,还有程序员大牛为各位免费解答问题,热心肠的小伙伴也是蛮多的。不失为是一个交流的的好地方,小编在这里邀请大家加入我的大家庭。欢迎你的到来。一起交流学习!共同进步!小编等你!

本人对于c++的认识,多年下来,经历了以下几个阶段,

1、 c++很好很强大,盲目追求运行性能,简直巴普洛夫条件反射,贡献了一大坨垃圾代码;

2、 c++的面向对象对持很垃圾,什么鬼,代码很容易就耦合,于是迷上对象+消息发送的面向对象;

3、 c++太复杂了,template太抽象,天外飞仙,搞不懂,二进制复用又差。整个c++就是垃圾,简直程序设计语言里面的败类,C语言多好啊,小巧精致简单清晰;

4、 使用其他语言做开发,java、C#、F#、elisp、scheme、python、haskell、javascript、php等等一大坨语言,感概每一种语言都比垃圾C++不要好太多,发誓不再用c++写哪怕一行的代码;

5、 某一天,突然有点理解了这种语言,一切变得清晰了,原来c++也相当不错,也可以做一些事情,看开之后,感觉开发效率也跟上来了,做同样的事情,用c++实现不会比C#、python等慢。

相比于其他语言,c++的独特优势在于

预编译期的伪图灵完备,这一点,好多语言还是有的,并且更超级好,比如rust,scheme

编译期间的C++是功能完备的解释器,其输出结果是正常运行的c++代码,结合宏,可以制造很多其他语言必须在语法层面上支持的语法糖。这个解释器的奇妙之处在于它运行于编译期,一旦错误的模板代码要进入运行期,就会出现编译错误,而不需要进入运行时的代码,即便天大错误,也都不要紧,而一旦这段代码要进入运行时,那么模板错误就逃不过编译期解释器的法眼。

生成各种内存布局的便利语法糖和自由的内存操控;不同类型的对象,只要其内存布局一致,通过强制转换,就可按同一类型来处理,这一点作死能力,绝不被有gc的语言支持。内存的无节操玩弄,结合template,分分钟就能仿真出来其他必须语言层面上提供的数据结构,类型安全、运行性能、易用性,一点都不逊色,好比string,委托,元组,列表,可空类型;

C++的专有特性,raii、多继承和全局变量。特别是全局变量,结合它的构造函数特点和类型推导,所能玩出来的丰富新花样,其他语言很难做到。全局变量是连接运行期和编译期的桥梁。如果没有全局变量,本座应该不会再次对c++产生热情。奇怪的是,至今为止,c++的基础库都不怎么挖掘全局变量的潜能。当然,对全局变量的使用,肯定是把它当做常量来用,全局变量有唯一的内存地址,就起到原子的作用,但它又可打包了丰富的静态类型信息。

以上的独特,造就了c++层出不穷的新意,而卓越的运行性能,只是其微不足道的优点。虽然说,语言不重要,思想才重要,软件架构才重要,但是c++所能承载的思想,以及其到达的抽象高度,的确就真的大大降低框架的复杂性,诚然,c++的基础库开发要面临无穷无尽的细节纠结,其实,这也反映了c++编译器掌控细节的能力,因此,我们又可以让编译器自动完成很多很多细节重复,从而大幅度地减轻代码数量,还无损其运行性能。又由于c++完备强大的静态类型特性,在用动态语言风格的简洁来编写代码的同时,又无损其快速方便地代码重构。笔者的基础库项目,几十次大规模的重构,借助单元测试,保证了重构顺利快速的完成,深感c++在重构上的便利,这些代码,包括不到1千行却功能完整的xml库(还支持对象与xml数据的直接互相转换);不到1千行却一点都不逊色于boost的spirit组合子解释器(编译速度却快了很多,语法上简洁很多,更能方便地解释各种语法);才1千多行的异步io框架;输入输出,文件操作,数据库,协程等代码都简洁异常,所有这些代码都支持动态库上的二进制复用,让人很惊诧于c++的光怪陆离的强大。

当然,c++的缺陷也震撼人心,

1、 语言特性太过繁杂抽象微妙,比如template、多继承、运算符重载、类型转换、兼容性考虑的很多糟糕语言特性,所以对使用者的节制力要求很高,要求他们时刻清楚自己在干什么,琐碎上的思考太多;

2、 缺乏统一的二进制标准,基础库都用源代码的形式共享,这让原本就龟速的编译速度更加地令人大大感动;

3、 缺乏高标准的基础库,stl和boost更在某些技术运用的展示上更起到很坏的影响;

4、 缺乏某些延迟求值的机制,缺乏必要的函数式语言机制;

就这样吧。

C++很难?神级程序员自述对C++的认识!见解独到能少走很多弯路!相关推荐

  1. 想做程序员?弄明白这些问题,你会少走很多弯路

    前言 几乎每一个新手程序员都会走上那么一段自学的道路,尤其是在校生或进入工作岗位之后,技术的提升基本都靠自学,有的虽然是网上报班学习,但更多时候还是自己在学习,师傅引进门,修行靠个人. 有的人自学很快 ...

  2. 世界神级程序员之一,成了被人唾骂的神棍?

    本文转载自 差评 前几天, Richard M.Stallman(查理德 · 斯特曼)在视频中宣布,自己将要回到 35 年前一手创立的 FSF(自由软件基金会),并且希望再次领导 FSF . 在技术圈 ...

  3. 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂.... 我打开了4399小游 ...

  4. 《千字文细谈》2021神级程序员都在用什么工具?-09-02

    答者:如下图  普通码农一枚,分享一下自己最常使用的几个效率生产工具. 目前还没看到神级程序员的回答,问题先码一下,坐等神级程序员. 下面本人抛砖引玉的回答: 1.关于架构设计和系统设计:会推荐几个自 ...

  5. 神级程序员都用什么工具?2020 年度开发工具 Top 100

    [CSDN 编者按]在过去的 2020 年,诞生了哪些新的开发工具?最优秀的开发工具和开发服务是什么?神级程序员们是怎么使用它们来开发顶尖的软件和服务? 作者 | StackShare Team    ...

  6. 在校大学生想当程序员,听老叔这番话,你会少走很多弯路【18年开发经验分享】

    前言 大家好,我是龙叔,一直以来都有一些大学生粉丝私聊向我"取经",可以看得出来很多人对前路多多少少都有些迷茫,我把大家的问题总结了一下,并对每个问题都做了我自己的见解,高频出现的 ...

  7. 码农提高工作效率很难?神级程序员五分钟带你提高!就这么简单!

    很多小伙伴都老是会碰到疑问,其实还是基础没打扎实,这些题如果你不看答案你能知道多少呢?如果还有很多不知道就证明基础没打扎实,如果你还在入门纠结,如果你还在苦恼怎么入门!小编有个建议,可以加小编弄的一个 ...

  8. 神级程序员8000行css代码画出一个蒙娜丽莎,堪比达芬奇!

    代码画出的蒙娜丽莎 今天逛CODEPEN找HTML5动画案例的时候,偶尔看到一位神级大师的作品,用纯CSS代码画出一副蒙娜丽莎,虽然分辨率不高,但是仍然让我很是震撼,一看代码,整整8000行,基本一行 ...

  9. 普通程序员和神级程序员的区别?

    或许从大神们的工作状态中,能找到一些蛛丝马迹. 有位名叫Ivan Bessarabov (简称"伊万") 的好事者,刚刚统计了各路大佬的代码提交 (git commit) 时间分布 ...

  10. python连接池框架_Python中的连接池是非常重要的!神级程序员详解!

    概述 连接池的作用就是为了提高性能,将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对Server端进行访问.这样 省略了创建连接和销毁连接的过程(TCP连接建立时的三次握手和销毁 ...

最新文章

  1. 《Linux From Scratch》第二部分:准备构建 第三章:软件包与补丁- 3.1. 简介
  2. springmvc + springboot + mybatis java b2b2c电子商城系统源码...
  3. php7 swoole 扩展,PHP7.2加入swoole扩展
  4. IDS与IPS的区别
  5. uvc音频传输协议_蓝牙中的三种音频编码:Apt-X、SBC、AAC,请问分别有什么区别?...
  6. MATLAB 内存容量修改
  7. 原生js动态为table追加html,JS动态添加Table的TR,TD实现方法
  8. 用freeze.py打包python程序成可执行程序(linux)
  9. linux 切换用户_Linux 用户态切换到内核态的 3 种方式
  10. Jquery 提示插件
  11. 面对 this 指向丢失,尤雨溪在 Vuex 源码中是怎么处理的
  12. linux 进程函数替换,Linux使用exec函数实现进程替换的代码分享
  13. springboot starter工作原理_98,谈谈SpringBoot的工作原理
  14. 大杂烩 -- 四种生成和解析XML文档的方法详解
  15. 一文了解下对小微风控策略的优雅调整
  16. java中sam接口_具有非SAM接口的lambda的Java习惯用法
  17. 如何对数据目标进行分析
  18. WebStorm2018.2 破解 激活
  19. 【hbase】解决海量图片存储
  20. Flink 常见问题总结

热门文章

  1. java 65533,java导出excel超出65533行
  2. 如何把 Mac 中的文件拷贝到NTFS硬盘?
  3. 丽江旅游线路规划丽江游玩小贴士丽江游玩攻略花费
  4. 企业网站排名,关键词选择原则,6个基本策略
  5. html如何链接icon,iconfont在线链接使用
  6. 深入了解gorm Scan的使用
  7. 使用python print打印函数返回值多一个None的问题探究
  8. composite-id class must implement Serializable
  9. excel合并两列内容_必看!Excel数据合并的这3个小技巧,千万要学会……
  10. Prolog 语言入门教程