首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

C++真的有那么不堪吗?

  •  
  •   lastright · 57 天前 · 7435 次点击
    这是一个创建于 57 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直都在用 C 写底层,最近开始接触到一些偏上层的东西(还没到业务层,是中间件),规模变大,感到用 C 开发有些吃力,我发现我正在用 C 模拟一些鐅脚的 C++的特性,例如模板,异常,对象内部属性的访问控制。

    鐅脚不是说代码啰嗦(这在我看来是小问题了),而是说费尽力气,人家已经做在语言里了,那为什么不用 C++呢。

    网上对 C++的诟病很多,加之看到云风博客上对 C++的一些看法,有种“苛政猛于虎”的感觉。但现在觉得,那些坑还是免不了要去踩一遍(我不知道为什么么我印象里 C++有很多坑,明明没系统的去学过)。

    最近开始对语言层面的东西感兴趣了,以前大家讨论的那些概念我看不懂,可能还是接触的代码规模一直不大的原因吧。

    如果各位没话说,我这就上路了。

    99 回复  |  直到 2019-08-08 10:22:21 +08:00
        1
    cookbook   57 天前
    一直 C++的飘过
        2
    janus77   57 天前
    挺好的啊,学就完了,你懂 C 学起来也快,而且兼容,无论以后用不用都不亏的
        3
    smallpython   57 天前
    好像是说语法设计的不符合人的思维习惯
        4
    lastright   57 天前
    @smallpython 你的名字。
        5
    shayuvpn0001   57 天前   ♥ 1
    不要试图用瑞士军刀去干电锯的活儿。
        6
    yulon   57 天前   ♥ 3
    自己爽用 C++,合作怕猪队友就无脑 C
        7
    neoblackcap   57 天前   ♥ 1
    C++是不管怎么骂,在抽象与效率方面它都是顶尖的。关键是这个语言需要你了解很多知识才能避开那些坑。
        8
    jiang42   57 天前 via iPhone   ♥ 1
    C++真的很多坑,反正我已经接受我的智商玩不转 C++这个现实了
        9
    pmispig   57 天前   ♥ 1
    你可以只用少部分 C++的特性,大部分时候当成 C 用。我朋友公司的项目,就只用 C++的对象,其他都当成 C 用
        10
    SuperMild   57 天前
    还不如学 rust, 学习难度比 C++ 小,编译器检查不出来的坑也少。
        11
    justfly   57 天前   ♥ 2
    从下往上用,基本没啥问题,从上往下用,问题就都来了。
        12
    across   57 天前
    你自己都说了,不是底层,开始接触上层架构,C 未必还能照顾到,这时候 C++又不是唯一选择··· 具体优劣分析的文章太多了。
        13
    Chenamy2017   57 天前
    每个语言都有他的劣势和优势,适合了就学。
        14
    v23x   57 天前   ♥ 8
    C++最大的缺点在于

    这东西实在太庞大了....

    极其自由 导致写法很多

    造成心智负担

    如果 C++只是你自己一个人用 其实还挺好的

    就是几个人合作的时候 一旦有其中一个水平不够 就会很麻烦
        15
    lastright   57 天前
    @pmispig 嗯,我经历过的公司也有这样做的。我怵 C++,是害怕自己”过度设计“。早期学编程的时候,发现一个可公用的方法,就兴奋的放到基类里,结果半天也写不了实质性的代码。C 给人对的感觉,就是直接把翅膀斩掉,让你丧失飞的可能。我现在虽然对 C 有怨念,但还是要感谢它教我走路。 其实我特别希望有一种轻度的 C++语言,模板做简单一点,能提供基本的泛型就够了,别的特性也都是只提供机制,而不要做的那么细,做的越细坑就越多,反正我现在是这么认为的。
        16
    mamahaha   57 天前   ♥ 1
    如果刘备是 php,诸葛亮是 python,那么关羽就是 c++,张飞就是 vb
        17
    lastright   57 天前
    @across 嗯,我倒不是在给项目做技术选型,是打算自己个人去学 C++这样子,一下子有需要”勇气“的感觉。。。
        18
    PanPancf   57 天前
    你可以一点点地逐渐使用 Cpp 的特性,然后尽量用新一点的 Cpp 标准。有的 Cpp 特性背后隐藏了比较多的知识,慢慢来呗
        19
    fuxiaohei   57 天前
    C++ 不是本身不好,是很难用好。就像飞机是交通工具最快的,但也不是谁都能开的。
        20
    nicebird   57 天前
    坑的话,浅显的看 effective c++,里面全是坑。
        21
    lastright   57 天前
    @justfly 多谢多谢 :)
        22
    ipwx   57 天前
    不是 C++ 那么不堪,是用 C++ 的人太不堪。

    微软 Google FB 哪家公司没有几个巨大无比的 C++ 项目。
        23
    nicebird   57 天前   ♥ 2
    一般真正的项目会砍掉大量的 c++特性
        24
    willm   57 天前 via Android
    除了少数领域,C++并不是唯一的选择,所以大部分人都选择了别的。我觉得目前 C++最大的问题是这是一门典型精英化的编程语言,只有老手才能勉强玩转,对于工程化是个大问题 。

    最关键的是,相对于它的复杂度和需要付出的努力,C++工作待遇明显不给力,性价比低,没新人学,人才断代,导致市场进一步萎缩,逆马太效应了。
        25
    VDimos   57 天前 via Android
    这个世界就是围绕 c/c 艹发展的
        26
    lastright   57 天前   ♥ 1
    @willm "精英化”语言,我倒是觉得它设计的不好(不要打我),不是我心目中的 C++的样子。。不过“我行我上”的话估计更惨。
        27
    macdkgb   57 天前
    Windows 操作系统是用什么语言写的?

    微软的工程师的 Quora 回答:kernel 几乎是 C,越往上层 C++ 就多了起来。超过 400 万个源文件,超过 500GB。
        28
    anguiao   57 天前 via Android   ♥ 7
    C++的牛逼之处就是每个人可能只用了它 20%的特性,但是每个人的 20%是不一样的,为了看懂别人的代码,你就得了解剩下的 80%。
        29
    thtznet   57 天前
    都没学过的话,rust 一把梭。
        30
    www5070504   57 天前
    如果只选一门语言 我选 c++ 奈何 c++对我来说难度挺大。。一直玩的不溜 有时候写的就是带类的 c。。
        31
    willm   57 天前 via Android
    @lastnight 精英化并不是一个褒义词,尤其对于一个工具
        32
    opentrade   57 天前 via Android
    如果想要学习 C++,可以了解一下我们的项目,
    https://github.com/opentradesolutions/opentrade
        33
    AlohaV2   57 天前 via Android
    一直都用 c++ & python
        34
    cabing   57 天前
    各种写法带你飞起。。自己用没事,怎么玩都行。
        35
    ericgui   57 天前 via Android
    我不是写 C++,但他们都说 cpp 是一门很多面性的语言,有 oop,有 function,有 c with class,你只需要用到一部分特性,解决你的问题即可,你不必要用到全部特性。

    所以我也准备着玩 cpp 了
        36
    impl   57 天前 via Android
    以前对 c 艹不感冒,学了 rust 后发现很多都是抄 c 艹的,所以最近把 c 艹也学起来了
        37
    wtdd   57 天前   ♥ 1
    c++由于复杂性,对智商尤其是记忆力要求太高,掌握不了的当然觉得不堪了
        38
    pursuer   57 天前
    c++语言本身是不错的,特别是 c++11 以后,我还是比较喜欢的,但是下面几个问题处理起来一直很麻烦

    包 /源码管理和构建模式花样实在多,特别 autotool 那套。现在好像 cmake 要成为这块的解决方案了。

    ABI 兼容。虽然我没碰到过,不同版本的编译器之间的二进制可能不通用,甚至标准库实现的不同都可能导致二进制不兼容。

    IDE 不太好使,之前想看下 llvm 的代码,拿 vscode 看的,看的比较蓝瘦。Java 的 IDE 大都可以方便的分析类的关系,比较好用,也可能是我用的不熟。顺便有没有觉得很不错的 c/c++的 IDE 可以推荐下。
        39
    lyh404   57 天前
    我感觉 C++最后都会用成 C。。
        40
    b00tyhunt3r   57 天前 via iPad
    @smallpython

    这个黑歪了吧,,毕竟 OOP,我觉得还是蛮符合人类思想模式的
        41
    694861283   57 天前
    我感觉楼上都是一群不用 C++的人在评价 C++,真正专心学 C++的人自然懂得 C++包含 C
        42
    araraloren   57 天前
    @SuperMild rust 是个反程序猿的语言..
        43
    zyxk   57 天前
    我想问一下,PC 软件带界面,除了 C++ C#还有什么可以用?
        44
    menyakun   57 天前
    @pursuer ABI 兼容+1,我也只是在各种 blog 看到过介绍,感觉兼容问题最大的应该是继承类的内存布局问题,但从来没实际遇到过。
        45
    abcbuzhiming   57 天前
    C++的最大问题就是特性太多,给人过多选择的后果就是大部分人选择困难。
        46
    season4675   57 天前
    能不能把 c++用好……这个得看智商……总结下:我 c++威武!
        47
    Torpedo   57 天前
    你不得不承认这玩意挺难。但是你也不得不承认这玩意很厉害
        48
    VensonEEE   57 天前   ♥ 1
    @zyxk vb delphi js/Electron java flexria 易 我基本上都用过... 除了 c++/qt 其他毛病挺多的。特别是安装包大 、效率低、内存大、机器适应性差...
        49
    h175h32   57 天前
    一直搞不懂 c++,c#,vc,.net 这些不都是微软搞的吗 为何还搞这么多出来
        50
    zyxk   57 天前
    @VensonEEE #48 非计算机专业的,我用了几年易,现在在用 c++/qt5,新学,主要做 PC 软件,觉得 c++确实挺难的,所以问下有什么好用的,所以您是觉得 c++Qt 比较好吗?谢谢
        51
    Fule   57 天前
    @araraloren 何出此言?
        52
    alexmy   57 天前
    C++细节可真是多,好几年不用,都忘得差不多了。
        53
    ThomasZ   57 天前 via Android
    云风也只是说 c++在你对它一知半解的时候要谨慎使用,并没有对这个语言有那么多负面评价啊,说它不堪的在我看来不过是些拿着高级语言搬砖之流,真正的程序员们对它应该是敬畏才对吧
        54
    VensonEEE   57 天前
    @zyxk 如果想正儿八经的做个客户端,c++/qt 是绕不过去的。易大家都知道,很难做大型的东西,业务型的也难,被各种杀软追杀,实在不是一条光明大道。
        55
    xpfd   57 天前
    c++开发的时候爽 各种特性可以炫 也很方便 但是等你想改一下架构的时候 你就会哭了 尤其是之前不是你写的时候 你会发现你面对的是一堆堆砌的很漂亮的狗屎 稍微一碰就变成一堆狗粪。。。。
        56
    restlessdream   57 天前
    @pursuer 可以用 clion 哦,有 mac 直接用 mac 版本,没有的话在 linux 桌面版下面用 clion,配置好 cmake,效果和 java 差不多,除了函数指针,lambda,基本都能正确解析。
        57
    restlessdream   57 天前
    c++11 后,加入了智能指针等各种新特性后,已经和 c 区别很大了,其实你用 c++的面向对象就好了,其他高级的,比如模板元编程这些不去碰它,还有在 c++里面尽量避免使用异常,也就没看起来那么难了,规规矩矩的用它,不懂的别乱用,写中小型项目问题不大的,c++不是什么老虎,也别妖魔化这个语言。
        58
    boyhailong   57 天前
    实际中往往不是你选择 C++,而是 C++选择了你!
        59
    hatsuyuki   57 天前
    @pursuer C++ IDE 推荐 CLion

    @h175h32 C++ 的语法标准是标准委员会制定的,编译器由各个厂商自行实现,其中 MSVC 是微软实现的编译器,C++ 并不是微软搞的

    云风本来是一个 C++ 厨,后来却成了 C++ 黑,不如来看看陈皓和云风的争议 C++的坑真的多吗? https://coolshell.cn/articles/7992.html
    抛弃 C 的一些东西,忘掉 C++ 11 之前的做法,拥抱新的 C++ 标准,就会觉得特别舒服
        60
    opentrade   57 天前 via Android
    @boyhailong 精辟
        61
    opentrade   57 天前 via Android
    C++跨平台最大的坑也许就是 gcc 里 static 变量初始化是线程安全的,msvc 里默认不是
        62
    virusdefender   57 天前
    可以看下 rust
        64
    turi   57 天前
    大佬说不好,你就觉得不好了 ?
    每个人的语言天赋不一样啊。

    马云说你要福报,40 岁死的那种。
    你要不要?

    不要人云亦云
        65
    Cloutain   57 天前
    基本除了内核程序,其他的尽量避免用 C++。由衷的说一句:易语言大法好
        66
    shayuvpn0001   57 天前
    @Cloutain 内核都会用 C 的吧
        67
    prophet1990   57 天前
    c++还好,用了 scala 以后,你就会发现,尼玛。1000 种写法
        68
    DragonQuestMaou   57 天前
    @shayuvpn0001 微软已经开始在内核部分地方使用 C++了
    国内外也有两种不同的态度
    国外内核驱动都喜欢用 C+ 不过大多都是简单的封装 不包含什么新特性
    有的就比较极端点 C++17...
    国内至少我认识的 大多喜欢用纯 C
    微软的态度是不推荐用 C++在内核 而且还有不少坑
        69
    Coeus999   57 天前
    哪里不堪了。。在低延迟要求高的领域里,除了选择 c++,还能选择其他嘛=。=

    (歪楼 c++程序员看机会的联系我,点击主页有联系方式谢谢)
        70
    Yiki   57 天前
    国外比较喜欢
    学过的真的觉得语法好反人类……
        71
    Cloutain   57 天前
    @DragonQuestMaou 高人把 STL 都搞了一套 NT 内核适用版,C++11 14 17 那么多好用的高级特性
    还用 C 不是自找麻烦吗 ε=ε=ε=┏(゜ロ゜;)┛
        72
    cpper   57 天前
    我们搞游戏引擎的就只能用 cpp 了,我觉得也还行,只是对开发者要求较高。
        73
    dbow   57 天前
    c++难用的地方, 就在干一个事的方法太多, 总有一个些傻逼写一些自以为聪明, "充分利用了语言特性"的鬼画符, 导致写代码的成本大部分在读别人的代码上。
        74
    tairan2006   57 天前
    别问,问就是 rust
        75
    bookit   57 天前
    一门程序语言的设计者不能是博士,你看他主导的演化,越来越复杂
        76
    Osk   57 天前 via Android   ♥ 2
    分享个笑话:


    小王是某 C++ 大型项目工程师,今天他上班触发了全量编译便回家了,明天再来。

    小张是深度神经网络 Python 工程师,今天他上班改了一个参数开始训练便回家了,三天后再来。

    小李是资深 Rust 工程师,今天他上班只花一小时就完成了需求。



    然后加班了三个晚上才使得编译通过。
        77
    towser   57 天前
    主要问题是特性庞杂,编写时的心智负担太大。
        78
    baixiangcpp   57 天前
    喷 C++的有两种人 一种是神,另一种是猪
        79
    hehheh   57 天前
    @lastright 也没办法,c++不是社区驱动的,有一个委员会,他们动作都很慢。
        80
    sky2017   57 天前
    C++ 两大问题,一个是坑很多,不熟悉的人难免采坑,查问题也难,这个很多人都提到了,另一个问题是轮子太少,开发效率低。做同一个东西 python 短短几十行代码就做出来了,用 c++吭哧吭哧一天弄出来还搞不好一堆 bug
        81
    insaneguy   57 天前
    团队项目使用 C++ 建议有靠谱的、有经验的工程师选择合适的子集,做好规约。

    任何语言都有人喷的,哪天一个大牛出来喷 C,你就不用 C 了吗。

    要不要学习新语言,看你的业务场景还有个人兴趣。
        82
    wugn   57 天前 via Android
    评论翻下来也没有见与 Java 对比的——大约 Java 的确凉了
        83
    kalista   56 天前
    cpp 对我而言还是太难了,所以只能用一些简单特性
        84
    littlewing   56 天前 via iPhone
    你们这些写业务的就别来掺和 c++了可以吗?老是比较我用 python 写个啥只用一句代码,用 c++要写好多,有意思吗?
        85
    kljsandjb   56 天前 via iPhone
    多范式编程,尽力给你 100%的自由度,但怎么发挥看个人了…并不是需要你充分用完它所有的“特性”
        86
    hkitdog   56 天前 via iPhone
    C++本来就不是用于业务层, 写外挂,除了易,就是 C++, 别无选择
        87
    hhhsuan   56 天前 via Android
    我只把 c++当面向对象的 C 用,所以还好
        88
    lazydog   56 天前 via Android
    一直都是 C/C ++,不过目前打算转 Go/Rust 了。另外,微软都打算用 rust 替代 c/c++了!
        89
    cyspy   56 天前
    Scheme 打败了 C++的世界也许会更好
        90
    waruqi   56 天前 via Android
        91
    koebehshian   56 天前
    楼主“一直都在用 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   56 天前
    后来从这个故事中引申出了“苛政猛于虎”的成语,意思就是统治者的暴政比吃人的老虎更加可怕。
        93
    gustav   56 天前
    google,fb,m$,tesla,spaceX 的核心语言都是 c++,大家都觉得 machine learning 就是 python,可其实第一语言也是 c++,fb 现在连脚本语言也要用 c++ jit 替换了,chrome 也是 c++,性能上仍然碾压 firefox,不知道吹了这么久的 rust,到什么时候能全部替换掉原有的 c++代码。

    大公司用 c++就是为了提升性能,节省开支,省个 20%~30%的电费,对于小公司好像无所谓,但对于这些大公司而言,那可是比巨款。
        94
    Roseboy   56 天前
    想起来一句话,如果你想寻找在被虐中被大众称道的感觉,请学 C++
        95
    nvioue   56 天前
    八年 cpp
    cpp 哪里是不堪, 只是资本家不需要使用这种性价比较低的方式.
    cpp 最合适的地方是驱动, OS, 以及要求性能的地方(例如 T 家海量并发后台).

    汇编同理, 为什么现在不用汇编去写程序? 因为没有必要, 性价比太低
        96
    datou   56 天前
    @v23x v2 也是这么评论 python,php 和 go 的
        97
    tcdh   56 天前
    可以用 go 吗?
        98
    tianshilei1992   56 天前
    我一直觉得自己的 C++ 写的还凑合,直到我看了俄罗斯同事的代码…
        99
    DragonQuestMaou   44 天前
    @Cloutain 有坑的 目前内核能用的 STL 基本都有坑
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2182 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 38ms · UTC 11:36 · PVG 19:36 · LAX 04:36 · JFK 07:36
    ♥ Do have faith in what you're doing.