c++在编程语言中的地位到底如何? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
MasutaaDAO
V2EX    程序员

c++在编程语言中的地位到底如何?

  •  < href="Javascript:" Onclick="downVoteTopic(963698);" class="vote">
  •   MasutaaDAO 2023-08-09 12:00:23 +08:00 4485 次点击
    这是一个创建于 843 天前的主题,其中的信息可能已经有所发展或是发生改变。

    总听见有人说这是个死气沉沉的对象模型。

    前天看见一个帖子说“是个语言,只要还活着的,甚至是有一口气的,都能找个理由踩 C++ 一脚,而且不同语言踩 C++ 的理由还各不相同。”

    个人使用感觉挺强大的,就是语法语义有点恶心,比如 new T 和 new T()居然是两种语义。

    41 条回复    2023-08-10 20:53:23 +08:00
    coderluan
        1
    coderluan  
       2023-08-09 12:12:26 +08:00   9
    地位也是随着时间变化的,有些东西历史地位很高,但是现在地位很低,比如 C++,比如我,秦始皇。
    qq565425677
        2
    qq565425677  
       2023-08-09 12:33:42 +08:00
    其他语言踩主要是 C/C++编程效率低吧,但在某些方面 C/C++是具有绝对不可替代性的,比如显卡驱动,某些嵌入式等
    penguinWWY
        3
    penguinWWY  
       2023-08-09 13:06:29 +08:00   1
    无敌的存在,各方面意义上的
    php 带节奏也就图一乐

    语言宗教战争还得看 c++,撕逼的档次和覆盖范围比别的语言高多了
    Xyg12133617
        4
    Xyg12133617  
       2023-08-09 13:47:03 +08:00
    @coderluan 我差点要被兄弟你笑死
    rb6221
        5
    rb6221  
       2023-08-09 14:00:23 +08:00
    踩的挺多,但是没看谁代替过。这种行为就不要理解了,人家说你也跟着说,那吃饭的家伙是能随便换的吗
    ch2
        6
    ch2  
       2023-08-09 14:23:04 +08:00
    哈姆雷特
    westoy
        7
    westoy  
       2023-08-09 14:24:34 +08:00   1
    敬鬼神而远之
    misdake
        8
    misdake  
       2023-08-09 14:41:50 +08:00 via Android
    C++给我一种叶问里洪金宝那个角色的感觉。

    耕耘多年,家业大有积累底子厚,有能力有核心竞争力。但逐渐衰老,在新兴的领域竞争不过别人,在整个行业里逐渐边缘化。
    iMiata
        9
    iMiata  
       2023-08-09 14:44:24 +08:00
    真的有人会踩 c++么,还从来没见到过的
    本人前端,最近倒是正在自学中
    yuruizhe
        10
    yuruizhe  
       2023-08-09 15:01:27 +08:00   1
    如果有开箱即用的包管理器,那便是极好的
    NessajCN
        11
    NessajCN  
       2023-08-09 15:05:04 +08:00   2
    c++你得会,毕竟不少老项目启动时候 go rust 这些还没出生,还有 qt 这些用 c++的框架必须要会它
    但是新写一个项目,那我肯定不会首选 c++了,除非某个非用不可的库只有 c++版的还不方便移植
    现代语言的包管理和工具链太重要了,你让我哼哧哼哧去找依赖手动一个一个下载在手写 CMakeLists ,跟一句 go mod tidy && go run ./ cargo update && cargo run 再相比我肯定选后者了
    geminikingfall
        12
    geminikingfall  
       2023-08-09 15:07:12 +08:00   1
    cpp 改的越来越难用了
    x77
        13
    x77  
       2023-08-09 15:12:27 +08:00
    底层基础设施东西少不了 C++,那地位不可撼动,未来 Go ,Rust 可能有机会动摇 C++
    blinue
        14
    blinue  
       2023-08-09 15:18:55 +08:00   4
    C++ 有一个好处是圈子比较干净,牛鬼蛇神一般不会 C++
    horizon
        15
    horizon  
       2023-08-09 15:19:06 +08:00
    语法太难受了,比 rust 还难受
    所以我在学 rust
    jmc891205
        16
    jmc891205  
       2023-08-09 15:21:51 +08:00
    看不惯他又干不掉他
    encro
        17
    encro  
       2023-08-09 15:25:10 +08:00   1
    据我所知,
    是所有语言中,
    平均工资相对比较高的,
    长沙这地方都是 15K 起,
    因为 15K 以下的你不敢用。。。
    encro
        18
    encro  
       2023-08-09 15:25:58 +08:00
    概括就是 --- 大数据,高性能的基石
    mainjzb
        19
    mainjzb  
       2023-08-09 15:33:28 +08:00   1
    java/C#/PHP 流行后,C++应用开发就被革命了。
    go 出来后,C++网络开发就被颠覆了。
    rust 出来正面杠,离成功还有很远很远。
    zig 出来后,被 C/C++当作包管理器(

    游戏引擎,图形图像处理,机器学习底层&gpu&汇编,操作系统,驱动,嵌入式,音视频编解码
    这些领域 C++还是大哥大,目前也就只有 Rust 能小试水花。
    比如 Chrom 就是 C++写的,怎么用别的语言重写?这都是被人验证了几十年累计下来的经验。

    但是我个人还是偏向于 Linus 的说法,C++是一门垃圾语言。
    可能就像我看多了梵高的画,觉得也就那样,不如手机随手拍的一张,但是我们生活在不同的年代,不同的环境,永远不能体会到一无所有的年代里创造的神奇。
    hhjuteman
        20
    hhjuteman  
       2023-08-09 15:43:29 +08:00
    不火-指 TIOBE 2022 年度语言,TIOBE 2023 8 月也就是现在,排名比 Java 高。
    我在上家公司做 c++流媒体的时候,hr 跟我说 C++程序员大概在市场简历里面只有 20 分之一到 30 分之一。
    所以一个正儿八经的 C++程序员,一直都很好找工作,我偷着乐很多年了。
    还有,我刚毕业在深圳做通信的时候,老板说很少找我这么年轻的小伙子,一般都找 10 年起步的 c++程序员,所以公司里很多 30 几奔 4 的。说通信行业要多积累,c++也要多积累,一般没有 10 年他都觉得不靠谱。所以做 c++的,一般意义上的"毕业"年龄要晚很多。
    assiadamo
        21
    assiadamo  
       2023-08-09 15:49:06 +08:00
    我做梦也想精通 cpp
    eibici
        22
    eibici  
       2023-08-09 15:51:04 +08:00
    喷 c++的,基本上是因为,他们只会那些简单的脚本语言,整不明白 c++咋用 (此处需要个表情)
    zsxzy
        23
    zsxzy  
       2023-08-09 16:06:36 +08:00
    目前做音视频相关, c++无法被替代, 现代 c++ 语法也好用, auto lambda .. 该有的都有了
    gaifanking
        24
    gaifanking  
       2023-08-09 16:09:22 +08:00
    c++很好啊!就是有点难,牛鬼蛇神也比较多。很喜欢 cpp 能定义栈变量(对象),Java 非得扔堆里再回收太难受(不算编译器优化栈上分配)。
    甚至感觉 c 的一些有点 Java 都没有,比如函数指针这种基础功能:函数是一等公民。
    AlohaV2
        25
    AlohaV2  
       2023-08-09 16:10:33 +08:00
    目前的状态是底层用 C++,上层用 Python ,性能与便捷性兼顾。
    adoal
        26
    adoal  
       2023-08-09 16:11:02 +08:00
    拿来写 CRUD 学习成本太高,不合算,而大量的 CRUD 岗位才是 IT 就业容量的根本,是阿狗阿猫都能进这个行业当程序员的前提。只靠写 infra 的精英是撑不起一个行业的繁荣的。
    chendl111
        27
    chendl111  
       2023-08-09 16:19:32 +08:00
    基建地位,虽然新秀各起,但在某些领域不可替代
    antonius
        28
    antonius  
       2023-08-09 16:33:56 +08:00   1
    《戏为六绝句其二》
    唐杜甫

    王杨卢骆当时体,
    轻薄为文哂未休。
    尔曹身与名俱灭,
    不废江河万古流。

    一首杜甫的绝句送给那些语言。
    ------------------------------------------------
    个人感受:相比 C ,汇编等语言,C++在注重性能的同时,提高了开发效率。但是标准更新频繁,特性越加越多,越来越不像"C"++了(不再是 C 的增强版),本来就够复杂了,随着新特性的增加,更加复杂。用久了 C++,越能体会到 C 的简洁优雅,编译时间更短,生成的程序也更小。

    广泛使用的语言不一定是设计最优秀的语言,“一门编程语言的命运啊,当然要靠优秀的设计,但是也要考虑到历史的行程”。
    flyqie
        29
    flyqie  
       2023-08-09 16:39:25 +08:00 via Android
    @antonius #28

    最后一句话,有点暴力。
    KMpAn8Obw1QhPoEP
        30
    KMpAn8Obw1QhPoEP  
       2023-08-09 16:50:34 +08:00 via Android
    @gaifanking 我没理解错的话 函数指针 Java 也有的 Functional Interface 就是
    roundgis
        31
    roundgis  
       2023-08-09 17:08:55 +08:00 via Android
    面 cpp 的位都是百起跳

    地位怎不知道 多半是的
    gaifanking
        32
    gaifanking  
       2023-08-09 17:47:32 +08:00
    @enchilada2020 @FunctionalInterface 还是基于 class 或 interface 的啊,不可以加在方法上。c 里的一个函数指针 Java 里要写一个 Interface 多别扭
    leonshaw
        33
    leonshaw  
       2023-08-09 17:47:41 +08:00
    @antonius 你说的这个东西啊,exciting
    zzzkkk
        34
    zzzkkk  
       2023-08-09 17:52:13 +08:00 via Android
    @roundgis
    一万多也很多
    gaifanking
        35
    gaifanking  
       2023-08-09 19:40:17 +08:00
    @antonius 可惜 c 的内置库太少没有 http ,没有集合、算法啥的。手撸浪费时间又怕有 bug ,只能找找开源的,或者干脆演变成了 c with stl 。
    FlashEcho
        36
    FlashEcho  
       2023-08-09 19:47:11 +08:00   1
    中国的环境是互联网公司厉害,其他的产业升级没跟上
    所以互联网公司代表的技术栈,就很流行,C++所以看上去就声音不大了
    你要是把 nvidia ,微软,epic ,adobe 这些公司变成中国土生土长的公司,那吹 C++的人就会很多
    agagega
        37
    agagega  
       2023-08-10 00:21:35 +08:00   7
    C++的成功来自于它在 C 的基础上提供了抽象能力,而抽象能力是开发大型软件所必需的。C 的成功自不必说。C++走了一条和 C 源码级兼容(除开某些语言细节上的差别)的道路(很多早期设计理念可以参考《 C++语言的设计与演化》这本书,讲得很好)。兼容性对 C++的成功至关重要。一开始我还不太能理解,直到后来遇见了 Objective-C 这个语言,它也可以和 C 源码级对接,苹果选择它作为平台开发语言和 macOS (前身是 NeXTSTEP )基于 UNIX 一样,可以充分利用已有的技术,是相当正确的决策。

    这种兼容性到现在带来了很多弊端,比如很多默认设定你就不能改,想要更 modern 就得自己额外写一点东西。但总的来说直到现在 C++和 C 的兼容都是利大于弊的,没有这层兼容最起码要和其他语言互操作就很麻烦(即使在同一个平台上 C++也没有统一的 ABI )。所以现代 C++的理念发展到现在,很多是在保留 C 遗产的同时整一套新语法,比如 C++14 的统一初始化、C++17 的结构化绑定和 C++20 的模块。C++标准委员会主席 Herb Sutter 搞了个叫 Cpp2 的东西,即推一套彻底新但是概念上和 C++相似的语法,然后通过一个预处理器编译到 C++,和当年最早的 C++到 C 转译器一样。这玩意本身当然不可能成为一个真正流行的新语言,但它更像一个 C++发展的试验场,由此也能看出所谓现代 C++的终极目标是在不放弃旧代码库的同时打造出一个先进的新语言。

    很多人可能瞧不起旧有的 C++代码库,觉得那都是迟早要进历史垃圾堆的玩意。然而连 Fortran 到今天都活得好好的,更别说更流行、吃到更多版本红利的 C++了。商业 C++代码我们不清楚,就看 LLVM 、GCC 、Chromium 这些巨无霸,它们可不是什么老旧代码,时刻都在演进。Google 想恶心 C++也没法全抛弃,只能搞了个类似前面说的 Cpp2 一样的 Carbon ,然后曰你们新项目都用 Rust 来写吧。Mozilla 算是这个星球上最纯正的 Rust 粉了吧?他们自己都没有太多用 Rust 重写 Firefox 里已有 C++代码的打算。所以 Clang 要往 C++塞生命周期标记,不是脱裤子放屁强行和 Rust 对标,而是非常有意义的现实需求。

    如果单纯把 C++当作一个既有代码库里才会用的语言,那 C++现在的状态其实还算健康。反正这些项目都已经定型,也不需要什么包管理器,CMake 本身就能当脚本写,实在不行拿 Python 出来承担构建工具的活也可以。但问题是:有多少新项目会使用 C++?

    这个问题可以分为两个子问题:第一,有哪些和 C++定位不同的语言取代了以前该用 C++写的项目;第二,有多少和 C++定位相似的语言取代了 C++的位置。第一个问题,在 Web 领域那显然是 Java 和若干脚本语言,在 GUI 领域则是 Java 、C#和 HTML5 ,中间件是 Java 和 Go. 第二个问题,先简单定义一下什么叫和 C++对标,就是有不错的抽象能力,有强类型系统,没有引用计数之外的垃圾回收,那 Rust 和 Swift 都算比较出名的竞争者,Swift 由于各种和 ObjC 兼容的负担以及苹果在自身生态之外确实没有什么想法,那就只有 Rust 了。

    目前看来 Rust 的进展很快,也搞出了一批「用 Rust 重写性能提升 xx 倍」的大新闻。我个人对这种营销不太感冒,但不得不承认它确实很有效,连本站都有很多人一看用 Rust 写的项目/学 Rust 就牛 X ,看到 C++写/学 C++就啊真老土。Rust 的地位在我看来离真正稳固还有距离(我 2015 年发 1.0 的时候第一次了解到这个语言,发展到今天算是超出预期,但比不了 Go 那种爆炸式流行),不过它确实做对了一些事:(1) 很早就提供了统一的包管理器和分发平台,还有 rustup 这种工具链管理器;(2) 把最佳实践落实到工具链层面;(3) 在保持基本兼容性的前提下,语言演进速度很快,RFC 通过后可以立刻实现,过几个版本就稳定下来。我和一些工作上用 Rust 的朋友聊过,惊奇地发现他们居然每天拉 nightly 的编译器来干活,这在 C++世界简直不敢想象。

    个人觉得,C++的优势:大量已有代码库,各种平台兼容性,社区体量,IDE 支持,基于模板元编程的表达能力;
    劣势:语言演进相对慢(求稳是好的,但可以编译器先实现再慢慢改,之前 module 和 concept 就是这样,可能还是因为编译器太复杂,而且用户对新特性也不热情,恶性循环),编译期反射能力欠缺,工具链不够便利( CMake 只能说能用,新世纪 20 年代了你给我说一个命令式构建工具有资格叫 modern ? xmake 也比它强。还没有被广泛使用的包管理器,交叉编译也不方便),很多语言之外的东西比较碎片化没有统一
    XIVN1987
        38
    XIVN1987  
       2023-08-10 08:55:17 +08:00
    地位还是很高的,,要不然 Java 、D 、Go 、Rust 一堆语言吵吵着要取而代之。。可惜至今一个都没成功。。
    vincent7245
        39
    vincent7245  
       2023-08-10 10:11:12 +08:00
    你猜他们为什么都去踩 C++
    jqknono
        40
    jqknono  
       2023-08-10 10:11:40 +08:00
    @iMiata 有啊, 我一直用 C++, 它的特性太多了, 很多设计没那么好, 有很多的历史债. Go 和 C#的特性实现好很多.
    易读, 易写, 一个目的只用一种写法.
    daokedao
        41
    daokedao  
       2023-08-10 20:53:23 +08:00
    也就 Rust 能和 C++ 一战,但 C++也在不断进步,谁笑到最后还不一定
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2213 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 01:04 PVG 09:04 LAX 17:04 JFK 20:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86