一直都在用 C 写底层,最近开始接触到一些偏上层的东西(还没到业务层,是中间件),规模变大,感到用 C 开发有些吃力,我发现我正在用 C 模拟一些鐅脚的 C++的特性,例如模板,异常,对象内部属性的访问控制。
鐅脚不是说代码啰嗦(这在我看来是小问题了),而是说费尽力气,人家已经做在语言里了,那为什么不用 C++呢。
网上对 C++的诟病很多,加之看到云风博客上对 C++的一些看法,有种“苛政猛于虎”的感觉。但现在觉得,那些坑还是免不了要去踩一遍(我不知道为什么么我印象里 C++有很多坑,明明没系统的去学过)。
最近开始对语言层面的东西感兴趣了,以前大家讨论的那些概念我看不懂,可能还是接触的代码规模一直不大的原因吧。
如果各位没话说,我这就上路了。
1
cookbook 2019-07-26 11:16:27 +08:00
一直 C++的飘过
|
2
janus77 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 1
不要试图用瑞士军刀去干电锯的活儿。
|
6
yulon 2019-07-26 11:27:52 +08:00 3
自己爽用 C++,合作怕猪队友就无脑 C
|
7
neoblackcap 2019-07-26 11:28:49 +08:00 1
C++是不管怎么骂,在抽象与效率方面它都是顶尖的。关键是这个语言需要你了解很多知识才能避开那些坑。
|
8
jiang42 2019-07-26 11:29:39 +08:00 via iPhone 1
C++真的很多坑,反正我已经接受我的智商玩不转 C++这个现实了
|
9
pmispig 2019-07-26 11:33:11 +08:00 1
你可以只用少部分 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 2
从下往上用,基本没啥问题,从上往下用,问题就都来了。
|
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 8
C++最大的缺点在于
这东西实在太庞大了.... 极其自由 导致写法很多 造成心智负担 如果 C++只是你自己一个人用 其实还挺好的 就是几个人合作的时候 一旦有其中一个水平不够 就会很麻烦 |
15
lastright OP @pmispig 嗯,我经历过的公司也有这样做的。我怵 C++,是害怕自己”过度设计“。早期学编程的时候,发现一个可公用的方法,就兴奋的放到基类里,结果半天也写不了实质性的代码。C 给人对的感觉,就是直接把翅膀斩掉,让你丧失飞的可能。我现在虽然对 C 有怨念,但还是要感谢它教我走路。 其实我特别希望有一种轻度的 C++语言,模板做简单一点,能提供基本的泛型就够了,别的特性也都是只提供机制,而不要做的那么细,做的越细坑就越多,反正我现在是这么认为的。
|
16
mamahaha 2019-07-26 11:51:59 +08:00 1
如果刘备是 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 2
一般真正的项目会砍掉大量的 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 8
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
各种写法带你飞起。。自己用没事,怎么玩都行。
|
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 1
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
lyh404 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 1
@zyxk vb delphi js/Electron java flexria 易 我基本上都用过... 除了 c++/qt 其他毛病挺多的。特别是安装包大 、效率低、内存大、机器适应性差...
|
49
h175h32 2019-07-26 14:06:13 +08:00
一直搞不懂 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 2
|
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 2
分享个笑话:
小王是某 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
hkitdog 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
tianshilei1992 2019-07-27 10:03:46 +08:00
我一直觉得自己的 C++ 写的还凑合,直到我看了俄罗斯同事的代码…
|
99
DragonQuestMaou 2019-08-08 10:22:21 +08:00
@Cloutain 有坑的 目前内核能用的 STL 基本都有坑
|