Rust Trait 与 C++ 继承:差异、取舍与选择

Rust trait 和 C++ 继承经常被放在一起比较,因为它们都能表达“多个类型具有相同行为”。但两者并不是严格对应的语言特性:trait 主要描述能力和约束,C++ 继承同时承担类型关系、接口抽象、实现复用与运行时多态。 因此,“哪个更好”不能脱离目标讨论。先给出结论: 表达接口、泛型约束和组合能力时,Rust trait 通常更清晰,也更难误用; 表达稳定的运行时多态时,两者都能胜任,Rust 使用 trait object,C++ 使用虚函数; 需要复用对象状态和基类实现时,C++ 继承更直接,但组合通常更容易维护; 需要与既有 C++ 框架、ABI 或面向对象体系协作时,C++ 继承不可替代; 如果从零设计强调安全性和显式依赖的系统,优先选择 Rust trait 与组合,而不是模仿类继承树。 1. 两者首先在解决什么问题 假设程序需要统一处理不同形状。 C++ 常用抽象基类: class Shape { public: virtual ~Shape() = default; virtual double area() const = 0; }; class Circle final : public Shape { public: explicit Circle(double radius) : radius_(radius) {} double area() const override { return 3.1415926 * radius_ * radius_; } private: double radius_; }; Rust 使用 trait: trait Shape { fn area(&self) -> f64; } struct Circle { radius: f64, } impl Shape for Circle { fn area(&self) -> f64 { std::f64::consts::PI * self.radius * self.radius } } 表面上,两段代码都规定了 area 接口。但它们的类型关系不同: ...

2026年9月1日 · 4 分钟 · Hellokitty