Pourquoi «Init» dans std :: ios_base :: Init majuscule?

Tous les noms de la bibliothèque C ++ standard sont en minuscules, sauf std::ios_base::Init . Pourquoi est-ce?

Dans une première version des classes IOStream, vous pouvez voir ios_base n’était pas présent à l’origine, basic_ios était la classe de base et était responsable d’ Init et des autres membres qui ont ensuite été séparés dans ios_base .

basic_ios avait aussi (et a toujours ) une fonction d’ init et bien que les deux noms n’aient pas forcément besoin d’être distincts, probablement pour essayer d’éviter la confusion, il a été décidé de nommer la classe Init et la fonction init . De plus, sans cette distinction, quelque chose comme ce qui suit aurait été nécessaire lors de l’utilisation de la classe:

 struct ios_base { struct init{}; void init(); }; ios_base::init i1; // error struct ios_base::init i2; // ok 

L’idée d’avoir une classe séparée responsable de l’initialisation des stream standard revient au moins à CFront 3.0, comme le montre Iostream_init dans cet en – tête. À un moment donné, il a été décidé non seulement de faire de la classe un membre de ios / basic_ios / ios_base mais aussi de la renommer en Init .

En tout cas, il est logique de désambiguïser les deux, même en considérant le fait qu’ils ont finalement été placés dans des classes séparées. Ils auraient pu choisir des noms complètement séparés à la place, mais probablement Init / init était considéré comme le meilleur choix sémantique pour décrire ce que font la classe et la fonction, et il y avait aussi une chance de simuler l’ancien Iostream_init , une I majuscule.