c++ design naming-conventions iostream c++-standard-library

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