为什么 "Init" 在 std::ios_base::Init 中是大写的?

Why is "Init" in std::ios_base::Init uppercase?

标准 C++ 库中的所有名称都是小写的,除了 std::ios_base::Init。这是为什么?

在 IOStream classes 的早期 draft 中,您可以看到 ios_base 最初不存在,basic_ios 是基础 class 并且负责 Init 和其他成员,后来分成 ios_base.

basic_ios 也有(和 still has)一个 init 函数,虽然这两个名称不一定必须不同,但大概是为了避免混淆,决定命名 class Init 和函数 init。此外,如果没有这种区别,在使用 class:

时将需要类似以下内容
struct ios_base
{
  struct init{};
  void init();
};

ios_base::init i1;        // error
struct ios_base::init i2; // ok

让一个单独的 class 负责初始化标准流的想法至少可以追溯到 CFront 3.0,Iostream_initthis header.在某些时候,决定不仅使 class 成为 ios/ basic_ios / ios_base 的成员,而且还应将其重命名为 Init.

在任何情况下,消除两者的歧义都是有意义的,即使考虑到它们最终被放在不同的 classes 中这一事实。他们本可以选择完全不同的名称,但据推测 Init / init 被认为是描述 class 和函数作用的最佳语义选择,而且也有可能它只是模仿较旧的 Iostream_init,出于某种原因也以大写 I.

开头