V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jianglibo
V2EX  ›  C++

为什么写 C++的人年龄偏大?

  •  
  •   jianglibo · 1 天前 · 6253 次点击

    C++什么会得到像我这样老年人的喜爱?

    首先 C++这个语言表达力及其丰富,以至于初学者不知所措,经常会看到不认识的语法,这是在其它语言不太会经历到的。 但是它所有的复杂性都服务于一个目标,抽象(abstraction)。抽象是一个高级的思考过程,它试图从杂乱无章中找到模式。

    不知各位有没有用过 boost json ,json 仅有几种有限的数据类型,大部分语言有类(class),用它来抽象这些数据类型也挺不错,c++也是 OOP 。 但是 C++还有 std::variant,就是说如果一个东西只可能有固定的几个类型,那么用std::variant来抽象更恰当(也可能更快,更不容易错,或者无法错)。

    其它比如shared_from_this等都是为解决问题而生,如果你没有碰到问题,那么你就不会深入理解shared_from_this。它是为了在异步环境中让对象自己保持活着,不然异步回调时如果对象已经销毁,就会 UAF 。

    namespace certctrl {
    
    class UpdateHandler : public IHandler, 
                          public std::enable_shared_from_this<UpdateHandler> {
    private:
      certctrl::ICertctrlConfigProvider &config_provider_;
      customio::ConsoleOutput &output_;
      client_async::HttpClientManager &http_client_;
      certctrl::CliCtx &cli_ctx_;
      std::shared_ptr<AgentUpdateChecker> update_checker_;
    
      // Platform detection
      std::string detect_platform();
      std::string detect_architecture();
      
      // Update workflow steps
      monad::IO<bool> check_for_updates(const std::string &current_version);
      monad::IO<bool> confirm_update();
      monad::IO<void> perform_update();
      monad::IO<std::string> download_update(const std::string &download_url);
      monad::IO<void> install_update(const std::string &downloaded_file);
      monad::IO<void> backup_current_binary();
      monad::IO<void> replace_binary(const std::string &new_binary_path);
      
      // Helper methods
      std::string get_current_binary_path();
      std::string generate_backup_path();
      bool verify_downloaded_file(const std::string &file_path, const std::string &checksum_url);
    
    public:
      UpdateHandler(certctrl::ICertctrlConfigProvider &config_provider,
                    customio::ConsoleOutput &output,
                    client_async::HttpClientManager &http_client,
                    certctrl::CliCtx &cli_ctx,
                    std::shared_ptr<AgentUpdateChecker> update_checker);
    
      std::string command() const override;
      monad::IO<void> start() override;
    };
    
    }
    

    当然这里仅仅举几个例子,每一个特性都是为解决问题而设计的。

    说到为什么年长者更喜欢 c++,我估计可能和大脑的抽象能力相关,我不是脑科学专家,我还问了 chatgpt ,它的答复:

    情况	结果
    纯逻辑、非经验性的抽象任务(数学推理、形状类比、无语言图形测试)	年轻人通常更强
    基于经验的抽象总结、模式识别	年长者可能更强
    需要同时抽象 + 处理大量新信息的任务	年轻人更快
    需要抽象 + 基于经验的判断	年长者表现可能更佳
    

    所以更准确的结论应该是,经验丰富的编程者可能会选择 C++。 如果你是初学者,不要为 C++的复杂度困扰,这需要一个过程,一个进步的过程。

    65 条回复    2025-12-05 15:59:01 +08:00
    byby
        1
    byby  
       1 天前
    写 Fortran 的年龄更大
    NewYear
        2
    NewYear  
       1 天前
    写 vb6.0 的年龄也偏大。

    主要是一般场景够用,语言简单,语法就像写文章一样,不用分号分隔,不用卡尺量缩进。

    if YouLoveMe then papapa

    你能信这是一个合法的语法么……

    缺点嘛,唉,不像 js 这种链式调用爽(自动补全啥的确实方便很多)

    自从学了 C#后,感觉一个语言是否牛逼真的不重要,但语法一定要优雅,要不然写起来不爽。
    penisulaS
        3
    penisulaS  
       1 天前   ❤️ 1
    用 C++的很多都是深耕某个具体行业的,竞争比较小(很可能招不到合适的人),比较容易活下来
    ttdx
        4
    ttdx  
       1 天前
    还有没有一种可能是,目前很多大学不教 cpp 了,大都是先教 c ,面向对象教 java ,选修课也是 python 。导致学 cpp 年轻人变少了,致使看上去都是老年人。
    echoechoin
        5
    echoechoin  
       1 天前
    那我更喜欢 c 语言哈哈 void* 走天下
    levelworm
        6
    levelworm  
       1 天前
    我这种脑容量也只能写 C 了。。。
    hjw45611
        7
    hjw45611  
       1 天前
    市场筛选的结果
    xmdbb
        8
    xmdbb  
       1 天前
    @NewYear 不,我還小
    bruce0
        9
    bruce0  
       1 天前
    可能是现在的年轻人,写后端的首选 Java 或者 go,研究底层的首选 rust,C++很多时候已经不是首选了
    jianglibo
        10
    jianglibo  
    OP
       1 天前
    @NewYear C++的语法也特丰富,不同的人几乎写出不同语言的味道。我这是属于 monadic c++. https://github.com/coderealm-atlas/cert-ctrl ,主要是受 spring webflux 和早期 Haskell 的影响。
    mightybruce
        11
    mightybruce  
       1 天前
    c++ 标准太多了, 不同的标准 c++ 之间差别都很大, 还有到现在 c++ 标准库还没有提供统一的网络编程接口,对于很多人来说,写个应用层的程序有困难, 底层引擎不存在差别, 甚至 c++ 老练经验丰富的程序员多, 比很多其他语言开发还有优势,rust 是不可能在底层各种引擎比如(图像渲染、AI 计算、HPC 计算、游戏引擎)代替 c++的。
    jonty
        12
    jonty  
       1 天前
    现在还停留在 c++14 甚至 c++11 的阶段,刚刚去看了看 std::variant ,太 modern 了
    zsxzy
        13
    zsxzy  
       1 天前
    智能指针 auto 这些特性已经大大降低了使用 c++的心智负担.
    加上 poco library 这样易用的库, c++ 写起来也挺爽的
    midsolo
        14
    midsolo  
       1 天前
    因为 Java 3 个月精通,C++ 要 5 年才入门
    AV1
        15
    AV1  
       1 天前
    看了下 std::variant ,就相当于 TS 的 union 类型吧,i 了 i 了🐶
    jianglibo
        16
    jianglibo  
    OP
       1 天前
    @mightybruce 没有统一网络编程接口不见得是坏事,不同的场景选择不同的库反而更加有利。其实以我的年龄和精力写 C++不合适( AI 以前),但有了 AI 就不一样了,人主要负责思考,工具使用,测试什么的都由 AI 代劳了。比如这个,https://github.com/coderealm-atlas/http_client ,在使用其它语言时不会想到去实现一个,但因为是 C++,有什么是 C++实现不了的呢?:), 当然这个也不是实现,只是在 boost beast 外面包裹了一层,让它符合我的编程风格而已,相当于一个小 helper.
    kekeabab
        17
    kekeabab  
       1 天前
    @bruce0 #9 rust 搞底层如同赤屎一样难受
    ihciah
        18
    ihciah  
       1 天前 via iPad
    shared_from_this 就是硬拿补丁当 feature 的例子。良好的结构设计就不应该出现对象自己抓自己的情况,应当显式外部传递 shared ptr 。你看隔壁 rust 直接不让你这么玩。
    L4Linux
        19
    L4Linux  
       1 天前 via Android
    多写点 python 就适应 modern c++了。
    gpt5
        20
    gpt5  
       1 天前
    刚进公司的时候,就我和另一个年纪比较大的跳槽过来的同事写 cpp/汇编。后来我不写了,就剩他了。工作量贼小,都是底层库,基本上优化到极限了,八百年不用改一行代码。有的同事有追求,读源代码,看里面还有我 n 年前写的注释,就找我来问,可是我已经全忘了了啊。cpp 还有人敢看,汇编部分的代码真是没人敢碰。
    mightybruce
        21
    mightybruce  
       1 天前
    @jianglibo 不要太相信 AI, 写 c++都要有自己的判断, 就不提 AI,比如一些写其他语言比如 python 的人 过来写 c++, 滥用 C++ 特性,libpytorch 全是滥用 shared_ptr
    adgfr32
        22
    adgfr32  
       1 天前 via Android   ❤️ 3
    是写 c 艹的变老了,不是老人喜欢 c 艹
    coderzhangsan
        23
    coderzhangsan  
       1 天前
    如果 C/C++是汽车三大件的话,那 php 就是那台车,对不起我只会开车,不懂也不会修这个车。🤣🤣
    naythefirst01
        24
    naythefirst01  
       1 天前
    门槛高呗
    ChainLock
        25
    ChainLock  
       1 天前
    c++学习太难了
    zuosiruan
        26
    zuosiruan  
       1 天前
    @ttdx 很多大学比如苏大 计算机专业的也是 python 起手了
    laminux29
        27
    laminux29  
       1 天前
    C++是艺术,但艺术不适合拿来赚钱。
    BingoXuan
        28
    BingoXuan  
       1 天前
    没有统一的构建工具,没有包管理器,更加没有统一包结构,也没有固定的 ABI
    Alias4ck
        29
    Alias4ck  
       1 天前
    我想起了之前吐槽 c++的视频
    c++真的是沉重的历史包袱
    ashong
        30
    ashong  
       1 天前
    @AV1 基于 RTTI 运行时判断的
    none
        31
    none  
       1 天前
    他们当年也年轻过。。。
    fredweili
        32
    fredweili  
       1 天前
    你就是想说自己聪明,那搞一个 mcp 出来看看
    somebody1
        33
    somebody1  
       1 天前
    我觉得完全没有说到点子上,那个年代就没得选啊,语言就不像现在这么多,而且内存小,CPU 慢,必须得充分利用机器的性能才行,动态语言根本没有发展空间。

    经济基础决定上层建筑,内存变大变便宜了,CPU 快了,这样才能让语言自己来申请释放, 浪费几百兆内存根本不会对机器产生什么影响。更快的开发速度,更好的安全特性,还有支持大型项目良好的代码结构就变得更为重要了。
    cmsyh29
        34
    cmsyh29  
       1 天前
    因为当年老登学 c++也是跟后来的 java go 属于新事物
    holydancer
        35
    holydancer  
       1 天前
    很简单,现在让我再学五笔,我也不会学了
    unused
        36
    unused  
       1 天前   ❤️ 1
    C++ 特性太多了,一个东西有无数种看起来正确的写法,每种写法在一些边界条件下又有细微的区别,就像研究茴字怎么写一样。等你费劲搞明白到底哪个是最佳实践之后,没多久又有新标准出来了。
    brsyrockss
        37
    brsyrockss  
       1 天前
    因为当年老登只能学 c 和++ ,java 想学你也学不到
    geminikingfall
        38
    geminikingfall  
       1 天前
    cpp 的心智负担很大,现在 cpp 能用的领域越来越少了。
    spritecn
        39
    spritecn  
       1 天前
    10 年后写 java 的人年龄也偏大啊
    bfdh
        40
    bfdh  
       1 天前
    @echoechoin #5 哈哈哈,写的时候写得爽,看的时候想骂娘。
    blackccc
        41
    blackccc  
       1 天前
    头像很可
    securityCoding
        42
    securityCoding  
       1 天前 via Android
    你自己体会一下贴的这段代码可读性跟 go 相比如何
    lvlongxiang199
        43
    lvlongxiang199  
       1 天前
    lisp 的表现力不比 cpp 丰富 ?
    realpg
        44
    realpg  
    PRO
       1 天前
    @NewYear #2
    vb6 的最优势区不是简单语法
    而是他的 windows UI 设计器 一切时间驱动
    lvlongxiang199
        45
    lvlongxiang199  
       1 天前
    `std::variant` 只不过是类似于 rust 中的 `enum`

    lisp 的表现力不比 cpp 丰富 ?

    lisp 里头可以自定义 `start...end` 甚至可以实现 rust 中的 `?`

    ```
    ;; 1. 定义读取函数
    (defun |#[-reader| (stream char arg)
    (declare (ignore char arg))
    ;; 读取 [] 内部的内容作为符号
    (let* ((content (read-delimited-list #\] stream t))
    (sym (car content))) ;; 获取符号,例如 2..10
    (if (symbolp sym)
    (let* ((str (symbol-name sym))
    (pos (search ".." str)))
    (if pos
    (let ((start (parse-integer (subseq str 0 pos)))
    (end (parse-integer (subseq str (+ pos 2)))))
    ;; 返回生成列表的代码
    `(loop for i from ,start to ,end collect i))
    (error "Syntax should be like #[2..10]")))
    (error "Content inside #[] must be a symbol"))))

    ;; 2. 将 #[ 注册到读取表
    (set-dispatch-macro-character #\# #\[ #'|#[-reader|)
    (set-macro-character #\] (get-macro-character #\))) ;; 让 ] 像 ) 一样作为结束符

    (print #[2..10])
    ;; 输出: (2 3 4 5 6 7 8 9 10)

    ```
    julyclyde
        46
    julyclyde  
       1 天前
    stl 普及之前 c++就是一坨屎吧,中间断了几年都没什么人喜欢学
    Rehtt
        47
    Rehtt  
       1 天前 via Android
    10 年后:为什么写 JAVA 的人年龄偏大
    20 年后:为什么写 GO 的人年龄偏大
    AV1
        48
    AV1  
       1 天前   ❤️ 1
    @Rehtt
    不会了,若干年后全民 AI 编程,所有程序员都是年龄偏大,不区分编程语言🐶
    chenliangngng
        49
    chenliangngng  
       1 天前
    进传统硬件大厂巨厂的应届硕士不都安排写 cpp 吗
    card123
        50
    card123  
       1 天前
    岁月催人老
    xuanbg
        51
    xuanbg  
       1 天前
    因为年轻的连 Java 都嫌烦,只愿意学点简单的 JS 、Python 什么的,最多赶新潮学个 go 。所以会 C 艹的年龄能不大么
    lumia1020
        52
    lumia1020  
       1 天前
    二十多年前可不是这样,那时写 C++的还很多小处男。
    IamUNICODE
        53
    IamUNICODE  
       1 天前
    不,我这种老登只想学 rust ,c++以前是噩梦,现在还是噩梦
    DJI360
        54
    DJI360  
       21 小时 45 分钟前
    @zuosiruan #26 怎么感觉这个回复似曾相识
    y1y1
        55
    y1y1  
       21 小时 33 分钟前 via iPhone
    cpp 语言学习门槛高,cpp 开发的东西门槛也高
    coolmenu
        56
    coolmenu  
       14 小时 9 分钟前
    从小处男写到老处男
    DreamLu
        57
    DreamLu  
       12 小时 50 分钟前
    20 年后,AI (满脸问号):为什么还有人古法编程!!!
    FengMubai
        58
    FengMubai  
       12 小时 31 分钟前
    1. 可以不用 C++的地方大多已经不用 C++了, 改用新兴语言 (虽然往往也没多新
    2. 不能不用 C++的地方, 其实相互之间差异很大, 很难跨领域流动, 更依赖"老师傅"的的工作经验
    dog82
        59
    dog82  
       12 小时 19 分钟前   ❤️ 1
    java/go 的标准库里到处是泛型,让人很难读,脑子拧成麻花了。不敢想象 cpp 的 template 加上指针能搞成万花筒
    whyso
        60
    whyso  
       12 小时 12 分钟前
    写 c++的就这逻辑这表达吗?确实有点抽象
    wupher
        61
    wupher  
       11 小时 53 分钟前
    现在谁写这个啊,内存管理碰上坑的时候,有查过 1 周多,那酸爽。

    一般是入行时学的。我那时 BCB / MFC 大行其道……难怪聪明的程序员都用 delphi……

    那个泛型模板库 ATL…… 没潘爱民老师,真搞不定。

    正常原型,用 Python, Ruby, 哪怕 js , ts 都快捷方便。

    后续考虑性能,扩展,中间件,转成 golang, rust, java/kotlin 也不难。

    我是很佩服那些弄 llm cpp 的,真牛。
    ccfly
        62
    ccfly  
       11 小时 25 分钟前
    说白了就是不好用没新人了 看语言流行趋势就可以知道现在啥用起来最方便
    rongwenqi
        63
    rongwenqi  
       9 小时 32 分钟前
    @byby 也不一定,我 90 后。
    devtk
        64
    devtk  
       7 小时 36 分钟前
    @rongwenqi 现在 90 后已经被人喊老毕登了
    sheepyoung01
        65
    sheepyoung01  
       5 小时 37 分钟前
    C++ 特性太多了,很难对齐粒度,一些人直接开摆往里面写 C ,一些人喜欢 C with class ,一些人喜欢用 c++11 的特性,一些甚至喜欢把最新的 modern feature 加进去,导致项目看上去像是群魔乱舞
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2713 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:36 · PVG 21:36 · LAX 05:36 · JFK 08:36
    ♥ Do have faith in what you're doing.