Skip to content
败犬日报 2025-10-23

败犬日报 2025-10-23

1. 是否推荐用 auto 定义变量

推荐的做法是 auto 用于避免写重复类型,例如:

cpp
auto a = static_cast<T>(b);
auto c = T::create();

如果一眼看不出类型不要用 auto 了。

2. 静态类型、动态类型、强类型、弱类型

几乎所有人对静态 / 动态类型的说法是:静态类型语言在编译期进行类型检查,类型检查是指标识符(通常是变量)是否和类型绑定,不可更改;动态类型语言相反。

但是有几个问题,编译期(语言的实现)和语言应该是解耦的,不能用来定义语言的属性。还有不应该只有标识符,而是所有表达式。

当然了,有人指出这个概念本身就没有严格的定义,所以这么说也无妨。


对于强 / 弱类型的说法更多更模糊了:

  1. 是否禁止隐式转换。(最常见的说法,随便一搜全是)
  2. 是否禁止丢失信息的隐式转换。wikipedia
  3. 类型安全:数据是否只按一个类型处理。wikipedia

其实隐式转换和类型安全都是阻止不合理的类型,只不过前者的结果明确但不符合人的期望,后者会导致严重问题(严格别名问题、数组越界、野指针等)。