Подтвердить что ты не робот

Почему "Init" в std:: ios_base:: Init занимает верхний регистр?

Все имена в стандартной библиотеке С++ имеют нижний регистр, кроме std::ios_base::Init. Почему это?

4b9b3361

Ответ 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.