学C++越学越有味是怎么回事

阿这…原来搞了这么一大圈,难不成是我引起的战火?? 如果是,那真的非常抱歉。

其实我也是cpp爱好者,我过去两年大学都是学cpp的,哈哈。我学c语言恰恰是最近的事情。我还发了两个帖子请教。

c很多开源项目为何重度用链表

新人如何打造一个最小最轻量,tags流(非lsp),c语言的工作环境,用于阅读linux kernel?

学c的主要原因是研究skynet时,受到云风 “用c写网络底层,用lua快速写逻辑” 这种思想的影响。 因此对用c写底层很感兴趣。比如,libevent,nginx,redis,linux kernel都是用c写的,我很想去研究他们代码。

不过这部分也是cpp的强力领域 (不会有人用纯c写上层业务吧)。 cpp的网络库我仔细研究过muduo。我发现到了底层后,cpp和c已经很像了。 比如muduo,基本没什么高级特性,就是在c的基础上,套个class,用了智能指针,用了std::function做回调. 还有用了一些基础的容器。这些并不是必不可少的东西,不过确实有效的简化代码。按照陈硕的说法, 可以把cpp当成一个better c来用。

但是有趣的是,muduo有很多地方是可以优化的,比如环形缓冲区muduo用了std::vector去实现。 它的定时器采用了std::set管理,std::function+bing做回调等。在git上有很多仿写项目,将这些部分优化掉,改成了c的写法,性能得到了提高。 所以,我觉得在接近底层的地方,cpp会越来越接近c。

我现在知道的两种观点就是 (1): better c, 可以用c++的特性简化代码,比如class,template,stl等。 (2) 纯c,Linus曾经就提到过用c的原因就是确保没有人滥用cpp的特性去捣乱,用c简单,可控。用宏虽然麻烦,指针虽然危险,但是底层才多少代码啊, libevent出来多少年了,也就修修补补。真coredump了,就gdb呗。

我还是学生,所以我没有想这么多,目前还在忙着看别人的开源项目,有什么我就学什么…话说各位大佬你们怎么看啊?

4 个赞