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
- 1. std :: ios_base :: jedli i std :: ios_base :: trunc
- 2. Dlaczego std :: ios_base :: ignore() ustawia bit EOF?
- 3. init boost :: opcjonalny niekopiowalny obiekt
- 4. init and awakeFromNib
- 5. metoda init w kontrolerze zf2
- 6. Storyboard i niestandardowe init
- 7. $ watch jest uruchamiany bezpośrednio po init, dlaczego?
- 8. Używanie brace-init do zainicjowania odniesienia do std :: shared_ptr
- 9. 'std :: ios_base :: ios_base (const std :: ios_base &)' „jest prywatną błąd podczas przeładowania operator << dla std :: ostram
- 10. Dlaczego funkcja init-capture lambda nie działa dla unique_ptr?
- 11. Jak cofnąć hg init?
- 12. Init firebase with FirebaseOptions
- 13. UIViewController (init i initWithNibName)
- 14. Git submodule init async
- 15. Konfiguracja Wiosna Metoda Init
- 16. Czy initWithFrame: trigger init?
- 17. Ustawianie funkcji init w jQuery
- 18. Przełączać użytkownika w skrypcie init?
- 19. Super init vs. rodzic .__ init__
- 20. serwlet Zastępowanie init (ServletConfig config)
- 21. init NSData do zera SWIFT
- 22. 'init()' jest przestarzałe: init() zostanie usunięty w Swift 3. Użyj `nil`
- 23. Pomoc w zrozumieniu jQuery.fn.init Dlaczego jest init in fn
- 24. Dlaczego użyjesz konstruktora metody klasowej w porównaniu z alokacją/init?
- 25. Can not init, obiekt w jQuery document.ready
- 26. SceneKit SCNNode init (mdlObject :) brakuje?
- 27. Tworzenie formularza django na init
- 28. Swift init Array o pojemności
- 29. Cakephp ClassRegistry :: init in bootstrap
- 30. Jak przetestować wymagany init (koder :)?
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