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

2025 年 12 月 4 日
 jianglibo

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++的复杂度困扰,这需要一个过程,一个进步的过程。

11681 次点击
所在节点    C++
76 条回复
mightybruce
2025 年 12 月 4 日
@jianglibo 不要太相信 AI, 写 c++都要有自己的判断, 就不提 AI,比如一些写其他语言比如 python 的人 过来写 c++, 滥用 C++ 特性,libpytorch 全是滥用 shared_ptr
zh3256
2025 年 12 月 4 日
是写 c 艹的变老了,不是老人喜欢 c 艹
coderzhangsan
2025 年 12 月 4 日
如果 C/C++是汽车三大件的话,那 php 就是那台车,对不起我只会开车,不懂也不会修这个车。🤣🤣
naythefirst01
2025 年 12 月 4 日
门槛高呗
ChainLock
2025 年 12 月 4 日
c++学习太难了
zuosiruan
2025 年 12 月 4 日
@ttdx 很多大学比如苏大 计算机专业的也是 python 起手了
laminux29
2025 年 12 月 4 日
C++是艺术,但艺术不适合拿来赚钱。
BingoXuan
2025 年 12 月 4 日
没有统一的构建工具,没有包管理器,更加没有统一包结构,也没有固定的 ABI
noahliaszn
2025 年 12 月 4 日
我想起了之前吐槽 c++的视频
c++真的是沉重的历史包袱
ashong
2025 年 12 月 4 日
@AV1 基于 RTTI 运行时判断的
none
2025 年 12 月 4 日
他们当年也年轻过。。。
fredweili
2025 年 12 月 4 日
你就是想说自己聪明,那搞一个 mcp 出来看看
somebody1
2025 年 12 月 4 日
我觉得完全没有说到点子上,那个年代就没得选啊,语言就不像现在这么多,而且内存小,CPU 慢,必须得充分利用机器的性能才行,动态语言根本没有发展空间。

经济基础决定上层建筑,内存变大变便宜了,CPU 快了,这样才能让语言自己来申请释放, 浪费几百兆内存根本不会对机器产生什么影响。更快的开发速度,更好的安全特性,还有支持大型项目良好的代码结构就变得更为重要了。
cmsyh29
2025 年 12 月 4 日
因为当年老登学 c++也是跟后来的 java go 属于新事物
holydancer
2025 年 12 月 4 日
很简单,现在让我再学五笔,我也不会学了
unused
2025 年 12 月 4 日
C++ 特性太多了,一个东西有无数种看起来正确的写法,每种写法在一些边界条件下又有细微的区别,就像研究茴字怎么写一样。等你费劲搞明白到底哪个是最佳实践之后,没多久又有新标准出来了。
brsyrockss
2025 年 12 月 4 日
因为当年老登只能学 c 和++ ,java 想学你也学不到
GeminiPro
2025 年 12 月 4 日
cpp 的心智负担很大,现在 cpp 能用的领域越来越少了。
spritecn
2025 年 12 月 4 日
10 年后写 java 的人年龄也偏大啊
bfdh
2025 年 12 月 4 日
@echoechoin #5 哈哈哈,写的时候写得爽,看的时候想骂娘。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1176844

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX