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

时间:2015-03-09 21:38:43

标签: c++ naming-conventions iostream c++-standard-library

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

1 个答案:

答案 0 :(得分:23)

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

basic_ios也有(和still hasinit函数,虽然这两个名字不一定非必须区分,但可能是为了避免混淆,我们决定命名类Init和函数init。此外,如果没有这种区别,在使用类时需要使用以下内容:

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

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

让一个负责初始化标准流的单独类的想法可以追溯至至少CFront 3.0,Iostream_init标题中的ios可以看到这一点。在某些时候,决定不仅让该课程成为basic_ios / ios_base / Init的成员,而且还应该重命名为Init

在任何情况下,即使考虑到最终将它们放在不同的类中,也可以消除歧义。他们本可以选择完全独立的名称,但可能init / Iostream_init被认为是描述类和函数所做的最佳语义选择,并且它也有可能只是模仿旧的I {1}},由于某种原因,它也以大写{{1}}开头。