C++ 最尴尬?
不、不、不,真正尴尬的是那些一边用着 C++ 的产品,还一边骂 C++ 太复杂该淘汰的人。
我干开发好多年,踩过内存泄漏的坑,也榨干过 CPU 的最后一滴性能。
![]()
C++ 虽年过 40 是,依然抗打。
一、谁都敢踩一脚的开发语言
几乎所有的开发语言都能找出批判 C++ 的理由,而且是站得住脚的理由。
![]()
1、Python、JS 嘲笑 C++ 开发慢
Python 团队用 FastAPI 十分钟搭出一个接口,而 C++ 配 CMake、管 vcpkg、防 ABI 破坏,三天还没跑通 hello world。
2、Java、C# 、Go 说 C++ 工程管理太野
Java 团队靠 Spring Boot 一天搭出微服务,而且很稳定。 而 C++ 项目里,改个头文件,CI跑两个小时,最后还能因 GCC 版本不一致编译失败。 更惨的是包管理,vcpkg 装个 OpenSSL,依赖冲突搞到凌晨三点
而 Go 一个 go mod tidy 就能搞定。
3、Rust 直接攻击 C++ 内存安全的命门
Rust 的所有权模型在编译期就杜绝了空指针、野指针、数据竞争。 而 C++ 即便有智能指针,也挡不住有人手写 new/delete,或者误用 shared_ptr 导致循环引用。
现代 C++ 通过 unique_ptr、RAII、移动语义,已经大幅减少典型错误。但依然无法像 Rust 那样根除所有隐患。
4、C 语言说 C++ 太魔法
C 社区最反感 C++ 的隐式行为:构造函数在你看不见的地方跑,异常让控制流乱飞。
所以 Linux 内核不用 C++,嵌入式驱动也尽量避开。
C++ 能通过 extern "C" 无缝调用 C 代码,这是它的一个优势。但内核等极端场景仍排斥 C++,因为即使不使用异常、RTTI、虚函数,C++ 编译器生成的代码也可能引入不可预测的符号或初始化顺序。
二、 C++ 的护城河
C++ 一直被围攻但依然很坚挺,是因为它有不可被绕过的护城河。
![]()
1、游戏引擎和图形渲染 Unreal Engine、Unity底层、V-Ray 渲染器,全靠 C++ 榨干 GPU 和 CPU 的最后一滴性能。
classTexture {GLuint id_;public:Texture(const std::string& path) {glGenTextures(1, &id_);// 加载纹理...}~Texture { glDeleteTextures(1, &id_); }Texture(const Texture&) = delete;Texture& operator=(const Texture&) = delete;Texture(Texture&& other) noexcept : id_(other.id_) {other.id_ = 0;}};
这种零开销、确定性释放的模式,在 GC 语言里无法实现。
2、高频交易和实时系统
在风控引擎的订单匹配模块中, QPS 超过 50 万,要求延迟
// 用 placement new 在预分配内存池中构造对象alignas(64) char order_pool[1024*1024];void* alloc = order_pool;auto*order=new (alloc) Order(...);// 手动调用析构,不释放内存order->~Order;
这种对内存布局的精细控制,只有 C++ 能做到。
3、高性能库的底层实现
Python 的 NumPy、PyTorch,Node.js 的 native addon,底层计算密集部分全是 C++。 以 PyTorch 为例,其卷积算子用 C++/CUDA 实现后,比纯 Python 版本快两个数量级。这种差距,在训练千亿参数模型时,意味着天与小时的区别。
例如 PyTorch 的卷积算子:
at::Tensorconv2d(const at::Tensor& input,const at::Tensor& weight,const at::Tensor& bias,IntArrayRef stride,IntArrayRef padding) {// 调用高度优化的 C++/CUDA 内核return at::native::convolution(input, weight, bias, ...);}
没有 C++,这些框架的性能会直接腰斩。
三、现代 C++ 在自救
从 C++11 开始,它一直在解决着自己的痛点。
![]()
1、智能指针终结裸指针滥用
// 别再写 new/deleteauto data = std::make_unique;process(std::move(data)); // 移动语义避免拷贝
用户 unique_ptr、shared_ptr、weak_ptr,内存安全提升巨大。
2、constexpr 把计算移到编译期
constexprintfactorial(int n){return n <= 1 ? 1 : n * factorial(n - 1);}int arr[factorial(5)];
3、范围 for 和算法库简化循环
std::vector nums = {1, 2, 3, 4, 5};for (int x : nums) {std::cout << x << "\n";}// 算法std::for_each(nums.begin, nums.end, (int x) {std::cout << x << "\n";});
4、模块解决了头文件地狱 C++20 模块让编译速度提升数倍
四、 C++ 不尴尬,尴尬的是拿它写 CRUD// math.ixxexportmodule math;exportintadd(int a, int b){ return a + b; }// main.cppimport math;intmain{ returnadd(2, 3); }
C++ 的真正问题,不是复杂,而是总被用在不该用的地方。
![]()
有人拿它写 CRUD,也有人用它写 HTTP 服务器、解析 API 请求,这不是 C++ 的错,是技术负责人没想清楚:你要的是开发速度,还是控制力?
现在问你: 你上次用 C++,是在写业务逻辑,还是在榨干硬件的最后一滴性能呢?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.