Wszystkie nazwy w standardowej bibliotece C++ są małe, z wyjątkiem std::ios_base::Init
. Dlaczego to?Dlaczego "Init" w std :: ios_base :: Init uppercase?
Odpowiedz
We wczesnym draft klas IOStream Widać, że ios_base
nie był pierwotnie obecny, basic_ios
była klasa bazowa i był odpowiedzialny za Init
i innych elementów, które później zostały rozdzielone na ios_base
.
basic_ios
też miał (a still has) funkcja init
, a gdy obie nazwy nie koniecznie muszą być wyraźne, przypuszczalnie, aby spróbować uniknąć nieporozumień zdecydowano się wymienić klasę Init
i funkcję init
. Również bez Rozróżnienie to coś jak następuje byłoby konieczne przy użyciu klasy:
struct ios_base
{
struct init{};
void init();
};
ios_base::init i1; // error
struct ios_base::init i2; // ok
Pomysł posiadające oddzielną klasę odpowiedzialną za inicjowanie standardowe strumienie sięga przynajmniej CFront 3,0, jak widać przez Iostream_init
w nagłówku this. W pewnym momencie postanowiono nie tylko sprawić, że klasa będzie należała do domeny ios
/basic_ios
/ios_base
, ale powinna również zmienić nazwę na Init
.
W każdym przypadku sensowne jest ujednoznacznienie obu, nawet biorąc pod uwagę fakt, że ostatecznie zostały umieszczone w oddzielnych klasach. Mogli zamiast tego wybrać zupełnie oddzielne nazwy, ale prawdopodobnie uznano, że jest to najlepszy semantyczny wybór do opisania klasy i funkcji. Istnieje również szansa, że po prostu naśladował starszego Iostream_init
, który z jakiegoś powodu również zaczyna się od wielka litera I
.
"ma" jest zbyt silne, ale tak, funkcja składowa o tej samej nazwie, co klasa klasy podstawowej, spowoduje, że ta klasa członków zostanie ukryta. – hvd
Hmm ... Sprawdzanie implementacji standardowego libstdC++, w ewolucji, która doprowadziła do standardu C++ 98, był punkt, w którym istniała tylko klasa 'ios' zawierająca zarówno' Init' i 'init'. W tym momencie różne nazwy były absolutnie niezbędne, a nie tylko przyjemne. – hvd
@hvd Zmieniłem sformułowanie odpowiedzi dzięki waszemu komentarzowi, różnica init/init wydaje się być artefaktem z odległej przeszłości. Chciałbym jednak podkreślić, że funkcja i klasa o tej samej nazwie nadal mogą szczęśliwie współistnieć w tym samym zakresie. – user657267
Powiedziałbym, że to po prostu dlatego, że wykonuje wiele ważnych prac związanych z inicjowaniem, konserwacją i czyszczeniem strumieni IO. Jest wyjątkowy pod tym względem, więc dostał kapitał. – IVlad
Kompatybilność wstecz. –
Ponieważ konwencje nazewnictwa i nazwy w C++ są kompletną plątaniną, tak jak były w C. – EJP