use*_*267 25

在IOStream类的早期草稿中,您可以看到ios_base最初不存在的,basic_ios是基类,并负责Init和后来被分离的其他成员ios_base.

basic_ios也有(并且仍然有)一个init函数,虽然两个名字不一定必须是不同的,大概是为了避免混淆,所以决定命名类Init和函数init.此外,如果没有这种区别,使用该类时必须使用以下内容:

struct ios_base
{
  struct init{};
  void init();
};

ios_base::init i1;        // error
struct ios_base::init i2; // ok
Run Code Online (Sandbox Code Playgroud)

有一个负责初始化标准流的单独类的想法可以追溯到至少CFront 3.0,正如Iostream_init这个标题中可以看到的那样.在某些时候,它决定不仅使类的成员ios/ basic_ios/ ios_base但它应该改名Init.

在任何情况下,消除两者的歧义是有意义的,即使考虑到它们最终被放置在不同的类中.他们本可以选择完全独立的名称,但可能Init/ init被认为是描述类和函数所做的最佳语义选择,而且它也有可能只是模仿较旧的Iostream_init,因为某些原因也是以大写字母开头I.

  • 嗯...检查预标准的libstdc ++实现,在导致C++ 98标准的演变中,有一个点只有一个`ios`类包含`Init`和`init`.那时,不同的名字是绝对必要的,不仅仅是很好. (2认同)