
一直都在用 C 写底层,最近开始接触到一些偏上层的东西(还没到业务层,是中间件),规模变大,感到用 C 开发有些吃力,我发现我正在用 C 模拟一些脚的 C++的特性,例如模板,异常,对象内部属性的访问控制。
脚不是说代码嗦(这在我看来是小问题了),而是说费尽力气,人家已经做在语言里了,那为什么不用 C++呢。
网上对 C++的诟病很多,加之看到云风博客上对 C++的一些看法,有种“苛政猛于虎”的感觉。但现在觉得,那些坑还是免不了要去踩一遍(我不知道为什么么我印象里 C++有很多坑,明明没系统的去学过)。
最近开始对语言层面的东西感兴趣了,以前大家讨论的那些概念我看不懂,可能还是接触的代码规模一直不大的原因吧。
如果各位没话说,我这就上路了。
1 cookbook 2019-07-26 11:16:27 +08:00 一直 C++的飘过 |
2 rb6221 2019-07-26 11:16:50 +08:00 挺好的啊,学就完了,你懂 C 学起来也快,而且兼容,无论以后用不用都不亏的 |
3 smallpython 2019-07-26 11:21:28 +08:00 好像是说语法设计的不符合人的思维习惯 |
4 lastright OP @smallpython 你的名字。 |
5 shayuvpn0001 2019-07-26 11:26:12 +08:00 不要试图用瑞士军刀去干电锯的活儿。 |
6 yulon 2019-07-26 11:27:52 +08:00 自己爽用 C++,合作怕猪队友就无脑 C |
7 neoblackcap 2019-07-26 11:28:49 +08:00 C++是不管怎么骂,在抽象与效率方面它都是顶尖的。关键是这个语言需要你了解很多知识才能避开那些坑。 |
8 jiang42 2019-07-26 11:29:39 +08:00 via iPhone C++真的很多坑,反正我已经接受我的智商玩不转 C++这个现实了 |
9 pmispig 2019-07-26 11:33:11 +08:00 你可以只用少部分 C++的特性,大部分时候当成 C 用。我朋友公司的项目,就只用 C++的对象,其他都当成 C 用 |
10 SuperMild 2019-07-26 11:36:23 +08:00 还不如学 rust, 学习难度比 C++ 小,编译器检查不出来的坑也少。 |
11 justfly 2019-07-26 11:37:56 +08:00 从下往上用,基本没啥问题,从上往下用,问题就都来了。 |
12 across 2019-07-26 11:38:58 +08:00 你自己都说了,不是底层,开始接触上层架构,C 未必还能照顾到,这时候 C++又不是唯一选择 具体优劣分析的文章太多了。 |
13 Chenamy2017 2019-07-26 11:43:22 +08:00 每个语言都有他的劣势和优势,适合了就学。 |
14 v23x 2019-07-26 11:44:01 +08:00 C++最大的缺点在于 这东西实在太庞大了.... 极其自由 导致写法很多 造成心智负担 如果 C++只是你自己一个人用 其实还挺好的 就是几个人合作的时候 一旦有其中一个水平不够 就会很麻烦 |
15 lastright OP @pmispig 嗯,我经历过的公司也有这样做的。我怵 C++,是害怕自己”过度设计“。早期学编程的时候,发现一个可公用的方法,就兴奋的放到基类里,结果半天也写不了实质性的代码。C 给人对的感觉,就是直接把翅膀斩掉,让你丧失飞的可能。我现在虽然对 C 有怨念,但还是要感谢它教我走路。 其实我特别希望有一种轻度的 C++语言,模板做简单一点,能提供基本的泛型就够了,别的特性也都是只提供机制,而不要做的那么细,做的越细坑就越多,反正我现在是这么认为的。 |
16 mamahaha 2019-07-26 11:51:59 +08:00 如果刘备是 php,诸葛亮是 python,那么关羽就是 c++,张飞就是 vb |
17 lastright OP @across 嗯,我倒不是在给项目做技术选型,是打算自己个人去学 C++这样子,一下子有需要”勇气“的感觉。。。 |
18 PanPancf 2019-07-26 11:55:36 +08:00 你可以一点点地逐渐使用 Cpp 的特性,然后尽量用新一点的 Cpp 标准。有的 Cpp 特性背后隐藏了比较多的知识,慢慢来呗 |
19 fuxiaohei 2019-07-26 11:57:23 +08:00 C++ 不是本身不好,是很难用好。就像飞机是交通工具最快的,但也不是谁都能开的。 |
20 nicebird 2019-07-26 11:58:43 +08:00 坑的话,浅显的看 effective c++,里面全是坑。 |
22 ipwx 2019-07-26 12:01:14 +08:00 不是 C++ 那么不堪,是用 C++ 的人太不堪。 微软 Google FB 哪家公司没有几个巨大无比的 C++ 项目。 |
23 nicebird 2019-07-26 12:01:38 +08:00 一般真正的项目会砍掉大量的 c++特性 |
24 willm 2019-07-26 12:05:50 +08:00 via Android 除了少数领域,C++并不是唯一的选择,所以大部分人都选择了别的。我觉得目前 C++最大的问题是这是一门典型精英化的编程语言,只有老手才能勉强玩转,对于工程化是个大问题 。 最关键的是,相对于它的复杂度和需要付出的努力,C++工作待遇明显不给力,性价比低,没新人学,人才断代,导致市场进一步萎缩,逆马太效应了。 |
25 VDimos 2019-07-26 12:07:46 +08:00 via Android 这个世界就是围绕 c/c 艹发展的 |
26 lastright OP @willm "精英化”语言,我倒是觉得它设计的不好(不要打我),不是我心目中的 C++的样子。。不过“我行我上”的话估计更惨。 |
27 macdkgb 2019-07-26 12:09:24 +08:00 Windows 操作系统是用什么语言写的? 微软的工程师的 Quora 回答:kernel 几乎是 C,越往上层 C++ 就多了起来。超过 400 万个源文件,超过 500GB。 |
28 anguiao 2019-07-26 12:10:39 +08:00 via Android C++的牛逼之处就是每个人可能只用了它 20%的特性,但是每个人的 20%是不一样的,为了看懂别人的代码,你就得了解剩下的 80%。 |
29 thtznet 2019-07-26 12:11:53 +08:00 都没学过的话,rust 一把梭。 |
30 www5070504 2019-07-26 12:16:45 +08:00 如果只选一门语言 我选 c++ 奈何 c++对我来说难度挺大。。一直玩的不溜 有时候写的就是带类的 c。。 |
32 opentrade 2019-07-26 12:26:56 +08:00 via Android 如果想要学习 C++,可以了解一下我们的项目, https://github.com/opentradesolutions/opentrade |
33 AlohaV2 2019-07-26 12:28:30 +08:00 via Android 一直都用 c++ & python |
34 cabing 2019-07-26 12:32:57 +08:00 各种写法带你飞起。。自己用没事,怎么玩都行。 /td> |
35 ericgui 2019-07-26 12:38:08 +08:00 via Android 我不是写 C++,但他们都说 cpp 是一门很多面性的语言,有 oop,有 function,有 c with class,你只需要用到一部分特性,解决你的问题即可,你不必要用到全部特性。 所以我也准备着玩 cpp 了 |
36 impl 2019-07-26 12:38:47 +08:00 via Android 以前对 c 艹不感冒,学了 rust 后发现很多都是抄 c 艹的,所以最近把 c 艹也学起来了 |
37 wtdd 2019-07-26 12:41:00 +08:00 c++由于复杂性,对智商尤其是记忆力要求太高,掌握不了的当然觉得不堪了 |
38 pursuer 2019-07-26 12:48:11 +08:00 c++语言本身是不错的,特别是 c++11 以后,我还是比较喜欢的,但是下面几个问题处理起来一直很麻烦 包 /源码管理和构建模式花样实在多,特别 autotool 那套。现在好像 cmake 要成为这块的解决方案了。 ABI 兼容。虽然我没碰到过,不同版本的编译器之间的二进制可能不通用,甚至标准库实现的不同都可能导致二进制不兼容。 IDE 不太好使,之前想看下 llvm 的代码,拿 vscode 看的,看的比较蓝瘦。Java 的 IDE 大都可以方便的分析类的关系,比较好用,也可能是我用的不熟。顺便有没有觉得很不错的 c/c++的 IDE 可以推荐下。 |
39 LaCroqueta12 2019-07-26 13:09:49 +08:00 我感觉 C++最后都会用成 C。。 |
40 b00tyhunt3r 2019-07-26 13:31:01 +08:00 via iPad |
41 694861283 2019-07-26 13:35:50 +08:00 我感觉楼上都是一群不用 C++的人在评价 C++,真正专心学 C++的人自然懂得 C++包含 C |
42 araraloren 2019-07-26 13:39:40 +08:00 @SuperMild rust 是个反程序猿的语言.. |
43 zyxk 2019-07-26 13:50:37 +08:00 我想问一下,PC 软件带界面,除了 C++ C#还有什么可以用? |
44 menyakun 2019-07-26 13:58:46 +08:00 @pursuer ABI 兼容+1,我也只是在各种 blog 看到过介绍,感觉兼容问题最大的应该是继承类的内存布局问题,但从来没实际遇到过。 |
45 abcbuzhiming 2019-07-26 14:01:02 +08:00 C++的最大问题就是特性太多,给人过多选择的后果就是大部分人选择困难。 |
46 season4675 2019-07-26 14:01:19 +08:00 能不能把 c++用好……这个得看智商……总结下:我 c++威武! |
47 Torpedo 2019-07-26 14:01:41 +08:00 你不得不承认这玩意挺难。但是你也不得不承认这玩意很厉害 |
48 VensonEEE 2019-07-26 14:03:37 +08:00 @zyxk vb delphi js/Electron java flexria 易 我基本上都用过... 除了 c++/qt 其他毛病挺多的。特别是安装包大 、效率低、内存大、机器适应性差... |
49 h175h32 一直搞不懂 c++,c#,vc,.net 这些不都是微软搞的吗 为何还搞这么多出来 |
50 zyxk 2019-07-26 14:07:47 +08:00 @VensonEEE #48 非计算机专业的,我用了几年易,现在在用 c++/qt5,新学,主要做 PC 软件,觉得 c++确实挺难的,所以问下有什么好用的,所以您是觉得 c++Qt 比较好吗?谢谢 |
51 Fule 2019-07-26 14:07:47 +08:00 @araraloren 何出此言? |
52 alexmy 2019-07-26 14:08:54 +08:00 C++细节可真是多,好几年不用,都忘得差不多了。 |
53 ThomasZ 2019-07-26 14:13:09 +08:00 via Android 云风也只是说 c++在你对它一知半解的时候要谨慎使用,并没有对这个语言有那么多负面评价啊,说它不堪的在我看来不过是些拿着高级语言搬砖之流,真正的程序员们对它应该是敬畏才对吧 |
54 VensonEEE 2019-07-26 14:13:31 +08:00 @zyxk 如果想正儿八经的做个客户端,c++/qt 是绕不过去的。易大家都知道,很难做大型的东西,业务型的也难,被各种杀软追杀,实在不是一条光明大道。 |
55 xpfd 2019-07-26 14:14:14 +08:00 c++开发的时候爽 各种特性可以炫 也很方便 但是等你想改一下架构的时候 你就会哭了 尤其是之前不是你写的时候 你会发现你面对的是一堆堆砌的很漂亮的狗屎 稍微一碰就变成一堆狗粪。。。。 |
56 restlessdream 2019-07-26 14:18:50 +08:00 @pursuer 可以用 clion 哦,有 mac 直接用 mac 版本,没有的话在 linux 桌面版下面用 clion,配置好 cmake,效果和 java 差不多,除了函数指针,lambda,基本都能正确解析。 |
57 restlessdream 2019-07-26 14:24:24 +08:00 c++11 后,加入了智能指针等各种新特性后,已经和 c 区别很大了,其实你用 c++的面向对象就好了,其他高级的,比如模板元编程这些不去碰它,还有在 c++里面尽量避免使用异常,也就没看起来那么难了,规规矩矩的用它,不懂的别乱用,写中小型项目问题不大的,c++不是什么老虎,也别妖魔化这个语言。 |
58 boyhailong 2019-07-26 14:40:02 +08:00 实际中往往不是你选择 C++,而是 C++选择了你! |
59 hatsuyuki 2019-07-26 14:40:11 +08:00 @pursuer C++ IDE 推荐 CLion @h175h32 C++ 的语法标准是标准委员会制定的,编译器由各个厂商自行实现,其中 MSVC 是微软实现的编译器,C++ 并不是微软搞的 云风本来是一个 C++ 厨,后来却成了 C++ 黑,不如来看看陈皓和云风的争议 C++的坑真的多吗? https://coolshell.cn/articles/7992.html 抛弃 C 的一些东西,忘掉 C++ 11 之前的做法,拥抱新的 C++ 标准,就会觉得特别舒服 |
60 opentrade 2019-07-26 14:55:23 +08:00 via Android @boyhailong 精辟 |
61 opentrade 2019-07-26 14:57:56 +08:00 via Android C++跨平台最大的坑也许就是 gcc 里 static 变量初始化是线程安全的,msvc 里默认不是 |
62 virusdefender 2019-07-26 15:00:44 +08:00 可以看下 rust |
63 charlie21 2019-07-26 15:18:38 +08:00 |
64 turi 2019-07-26 15:22:25 +08:00 大佬说不好,你就觉得不好了 ? 每个人的语言天赋不一样啊。 马云说你要福报,40 岁死的那种。 你要不要? 不要人云亦云 |
65 Cloutain 2019-07-26 15:27:47 +08:00 基本除了内核程序,其他的尽量避免用 C++。由衷的说一句:易语言大法好 |
66 shayuvpn0001 2019-07-26 15:29:21 +08:00 @Cloutain 内核都会用 C 的吧 |
67 prophet1990 2019-07-26 15:42:34 +08:00 c++还好,用了 scala 以后,你就会发现,尼玛。1000 种写法 |
68 DragonQuestMaou 2019-07-26 15:49:07 +08:00 @shayuvpn0001 微软已经开始在内核部分地方使用 C++了 国内外也有两种不同的态度 国外内核驱动都喜欢用 C+ 不过大多都是简单的封装 不包含什么新特性 有的就比较极端点 C++17... 国内至少我认识的 大多喜欢用纯 C 微软的态度是不推荐用 C++在内核 而且还有不少坑 |
69 Coeus999 2019-07-26 15:52:06 +08:00 哪里不堪了。。在低延迟要求高的领域里,除了选择 c++,还能选择其他嘛=。= (歪楼 c++程序员看机会的联系我,点击主页有联系方式谢谢) |
70 Yiki 2019-07-26 15:59:01 +08:00 国外比较喜欢 学过的真的觉得语法好反人类…… |
71 Cloutain 2019-07-26 16:08:55 +08:00 @DragonQuestMaou 高人把 STL 都搞了一套 NT 内核适用版,C++11 14 17 那么多好用的高级特性 还用 C 不是自找麻烦吗 ε=ε=ε=┏(ロ;)┛ |
72 cpper 2019-07-26 16:18:44 +08:00 我们搞游戏引擎的就只能用 cpp 了,我觉得也还行,只是对开发者要求较高。 |
73 dbow 2019-07-26 17:03:00 +08:00 c++难用的地方, 就在干一个事的方法太多, 总有一个些傻逼写一些自以为聪明, "充分利用了语言特性"的鬼画符, 导致写代码的成本大部分在读别人的代码上。 |
74 tairan2006 2019-07-26 17:08:19 +08:00 别问,问就是 rust |
75 bookit 2019-07-26 17:21:05 +08:00 一门程序语言的设计者不能是博士,你看他主导的演化,越来越复杂 |
76 Osk 2019-07-26 17:42:14 +08:00 via Android 分享个笑话: 小王是某 C++ 大型项目工程师,今天他上班触发了全量编译便回家了,明天再来。 小张是深度神经网络 Python 工程师,今天他上班改了一个参数开始训练便回家了,三天后再来。 小李是资深 Rust 工程师,今天他上班只花一小时就完成了需求。 然后加班了三个晚上才使得编译通过。 |
77 towser 2019-07-26 17:48:37 +08:00 主要问题是特性庞杂,编写时的心智负担太大。 |
78 baixiangcpp 2019-07-26 18:47:14 +08:00 喷 C++的有两种人 一种是神,另一种是猪 |
80 sky2017 2019-07-26 19:06:35 +08:00 C++ 两大问题,一个是坑很多,不熟悉的人难免采坑,查问题也难,这个很多人都提到了,另一个问题是轮子太少,开发效率低。做同一个东西 python 短短几十行代码就做出来了,用 c++吭哧吭哧一天弄出来还搞不好一堆 bug |
81 insaneguy 2019-07-26 19:13:27 +08:00 团队项目使用 C++ 建议有靠谱的、有经验的工程师选择合适的子集,做好规约。 任何语言都有人喷的,哪天一个大牛出来喷 C,你就不用 C 了吗。 要不要学习新语言,看你的业务场景还有个人兴趣。 |
82 wugn 2019-07-26 19:17:25 +08:00 via Android 评论翻下来也没有见与 Java 对比的大约 Java 的确凉了 |
83 kalista 2019-07-26 19:44:53 +08:00 cpp 对我而言还是太难了,所以只能用一些简单特性 |
84 littlewing 2019-07-26 20:13:38 +08:00 via iPhone 你们这些写业务的就别来掺和 c++了可以吗?老是比较我用 python 写个啥只用一句代码,用 c++要写好多,有意思吗? |
85 kljsandjb 2019-07-26 20:17:51 +08:00 via iPhone 多范式编程,尽力给你 100%的自由度,但怎么发挥看个人了…并不是需要你充分用完它所有的“特性” |
86 hkitog 2019-07-26 20:18:11 +08:00 via iPhone C++本来就不是用于业务层, 写外挂,除了易,就是 C++, 别无选择 |
87 hhhsuan 2019-07-26 20:26:09 +08:00 via Android 我只把 c++当面向对象的 C 用,所以还好 |
88 lazydog 2019-07-26 20:27:24 +08:00 via Android 一直都是 C/C ++,不过目前打算转 Go/Rust 了。另外,微软都打算用 rust 替代 c/c++了! |
89 cyspy 2019-07-26 20:31:18 +08:00 Scheme 打败了 C++的世界也许会更好 |
90 waruqi 2019-07-26 20:32:19 +08:00 via Android @pursuer 可以用 xmake + vscode https://github.com/xmake-io/xmake-vscode |
91 koebehshian 2019-07-26 20:49:53 +08:00 楼主“一直都在用 C 写底层,最近开始接触到一些偏上层的东西”,那我向你安利 golang+js,golang 的发明人之一,也是 C 语言的发明人,所以很多语法都像 C ; golang 直接编译成二进制,而且没有任何外部依赖,所以不会出现 C 或 C++编写的程序(没有静态链接时)缺少 dll 或 so 的情况; golang 编译器支持交叉编译,设置一个环境变量 GOOS 与 GOARCH 即可,不存在像 C 语言那样需要下载专门的交叉编译器,专门 libc ; golang 语言语法层次支持多线程( golang 中叫 go routine ),不像 C 语言那样复杂; golang 标准库丰富,比如 http 服务,各种加密编码都有标准的,不像 C 语言那样百花齐放; golang 语法上做减法,风格一统,但没有像 python 那样用空格的多少表示语法; golang 的文档,不是一个 chm 文档,而是一个 godoc 程序,自动解析源码,web 的 GUI。 golang 的标准库没有 GUI,因为 webGUI 已经是最简单,最通用的了,所以我向你安利 js,有 C 语言基础的基本上 w3school 上花一天过一遍就大致能写了。 |
92 tlday 2019-07-26 20:54:04 +08:00 后来从这个故事中引申出了“苛政猛于虎”的成语,意思就是统治者的暴政比吃人的老虎更加可怕。 |
93 gustav 2019-07-26 21:11:41 +08:00 google,fb,m$,tesla,spaceX 的核心语言都是 c++,大家都觉得 machine learning 就是 python,可其实第一语言也是 c++,fb 现在连脚本语言也要用 c++ jit 替换了,chrome 也是 c++,性能上仍然碾压 firefox,不知道吹了这么久的 rust,到什么时候能全部替换掉原有的 c++代码。 大公司用 c++就是为了提升性能,节省开支,省个 20%~30%的电费,对于小公司好像无所谓,但对于这些大公司而言,那可是比巨款。 |
94 Roseboy 2019-07-26 21:19:09 +08:00 想起来一句话,如果你想寻找在被虐中被大众称道的感觉,请学 C++ |
95 nvioue 2019-07-26 21:23:07 +08:00 八年 cpp cpp 哪里是不堪, 只是资本家不需要使用这种性价比较低的方式. cpp 最合适的地方是驱动, OS, 以及要求性能的地方(例如 T 家海量并发后台). 汇编同理, 为什么现在不用汇编去写程序? 因为没有必要, 性价比太低 |
97 tcdh 2019-07-27 06:49:08 +08:00 可以用 go 吗? |
98 shiltian 2019-07-27 10:03:46 +08:00 我一直觉得自己的 C++ 写的还凑合,直到我看了俄罗斯同事的代码… |
99 DragonQuestMaou 2019-08-08 10:22:21 +08:00 @Cloutain 有坑的 目前内核能用的 STL 基本都有坑 |