c++ - ¿Por qué "Init" en std:: ios_base:: Init mayúscula?
design naming-conventions (1)
Todos los nombres en la biblioteca estándar de C ++ son minúsculas, excepto std::ios_base::Init
. ¿Por qué es esto?
En un draft inicial de las clases IOStream, puede ver que ios_base
originalmente no estaba presente, basic_ios
era la clase base y era responsable de Init
y otros miembros que luego se separaron en ios_base
.
basic_ios
también tenía (y aún tiene ) una función init
, y aunque los dos nombres no necesariamente tenían que ser distintos, probablemente para intentar evitar la confusión se decidió nombrar la clase Init
y la función init
. Además, sin esta distinción, algo como lo siguiente habría sido necesario al usar la clase:
struct ios_base
{
struct init{};
void init();
};
ios_base::init i1; // error
struct ios_base::init i2; // ok
La idea de tener una clase separada responsable de inicializar las transmisiones estándar se remonta al menos a CFront 3.0, como se puede ver en Iostream_init
en this encabezado. En algún punto, se decidió no solo hacer que la clase fuera miembro de ios
/ basic_ios
/ ios_base
sino que debería renombrarse como Init
.
En cualquier caso, tiene sentido desambiguar a los dos, incluso teniendo en cuenta el hecho de que finalmente se colocaron en clases separadas. Podrían haber elegido nombres completamente separados en su lugar, pero presumiblemente Init
/ init
se consideró como la mejor opción semántica para describir lo que hacen la clase y la función, y también existe la posibilidad de que simplemente se tratara de imitar el Iostream_init
anterior, que por alguna razón también comienza con una mayúscula I