标准C ++库中的所有名称均为小写,std::ios_base::Init
除外。这是为什么?
答案 0 :(得分:23)
在早期draft的IOStream类中,您可以看到ios_base
最初不存在,basic_ios
是基类,负责Init
和其他成员后来被分成ios_base
。
basic_ios
也有(和still has)init
函数,虽然这两个名字不一定非必须区分,但可能是为了避免混淆,我们决定命名类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}}开头。