Все имена в стандартной библиотеке С++ имеют нижний регистр, кроме std::ios_base::Init
. Почему это?
Почему "Init" в std:: ios_base:: Init занимает верхний регистр?
Ответ 1
В раннем проекте классов IOStream вы можете видеть, что ios_base
изначально не присутствовал, basic_ios
был базовым классом и отвечал за Init
и другие члены, которые позже были разделены на ios_base
.
basic_ios
также имел (и все еще имеет) функцию 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
в this. В какой-то момент было решено не только сделать класс членом ios
/basic_ios
/ios_base
, но его следует переименовать Init
.
В любом случае имеет смысл рассогласовывать эти два вопроса, даже учитывая тот факт, что они были в конечном итоге размещены в отдельных классах. Вместо этого они могли бы выбрать совершенно отдельные имена, но предположительно Init
/Init
считался лучшим семантическим выбором для описания того, что делает класс и функция, а также вероятность того, что он просто имитирует более старый Iostream_init
, который по какой-то причине также начинается с прописной буквы I
.