Często się zastanawiałem, dlaczego C++ ma nazwę wchar_t
zamiast po prostu wchar
i nigdy nie byłem w stanie znaleźć odpowiedzi. Wyszukiwarki nie są pomocne, ponieważ myślą, że pytam o typ Windows "WCHAR
. Jakieś pomysły?Dlaczego nazywa się "wchar_t", a nie po prostu "wchar"?
Odpowiedz
To jest dziedzictwo z C, gdzie wchar_t
to typedef
i typedef
s mają ten przyrostek w C Standard Library.
Dzięki. Nie zdawałem sobie sprawy, że był pierwotnie częścią C. – Cogwheel
Ale stało się, gdy zbliżał się C++ i opracowano nowe standardy ISO. –
Wiem, że jednym z celów projektowych C++ było pozostanie kompatybilnym ze standardowym C, jak to tylko możliwe. Rozumiem ich decyzję, chociaż nie mogę powiedzieć, że zgadzam się z tą szczególną motywacją. – Cogwheel
Myślę, że była to "faza" w dorastaniu C i C++. Pojawiło się zapotrzebowanie na nowe typy, ale dodawanie nowych słów kluczowych jest zawsze kwestionowane. Niektóre kod był już używany wchar
, o wiele mniej kod użyłby wchar_t
. Zauważ, że size_t
i diff_t
należą do tej samej ery.
Biblioteka standardowa C używa przyrostka _t
dla wielu typów zdefiniowanych w bibliotece (w przeciwieństwie do typów, które są pieczone w C jako słowa kluczowe).
Na przykład, istnieje time_t
, wchar_t
, uint32_t
, size_t
, ptrdiff_t
, div_t
itp
odsetek (w każdym razie dla mnie) jest to, że standard C nie rezerwuje nazwy tej formie dla siebie. Standard C wskazuje, że nazwy zaczynające się od "str
", "mem
" i kilka innych prefiksów mogą być dodawane do standardu w przyszłości, ale nie ma to miejsca w przypadku nazw kończących się na "_t
" - z tą różnicą, że nazwy, które zaczynają się od "int
" lub "uint
" i kończą się na "_t
", mogą zostać dodane do <stdint.h>
w przyszłości. Jednak POSIX zastrzega wszystkie nazwy, które kończą się na "_t
".
- 1. Dlaczego nazywa się "String"?
- 2. Dlaczego nazywa się onBlur?
- 3. Dlaczego "więcej" ISeq nie nazywa się "reszta"?
- 4. didChangeAuthorizationStatus nie nazywa się po kliknięciu Pozwól
- 5. NamedPipeServerStream.EndWaitForConnection() po prostu zawiesza się po użyciu
- 6. textViewDidEndEditing nie nazywa się
- 7. XmlHttpRequest.onload nie nazywa się
- 8. Co się nazywa po "onConfigurationChanged()"?
- 9. navigator.geolocation.watchPosition po prostu nie działa
- 10. textFieldDidBeginEditing: nie nazywa się
- 11. cellForRowAtIndexPath nie nazywa po reloadRowsAtIndexPaths
- 12. Dlaczego Django fcgi po prostu umrzeć? Jak mogę się dowiedzieć?
- 13. Dlaczego deklaracja typedef nie nazywa się definicją typedef?
- 14. Android - onLoadFinished nie nazywa się
- 15. Dlaczego pojęcie Marshallinga nazywa się jako takie?
- 16. dylib destructor nie nazywa się
- 17. ios - UIWebView DidFinishLoad nie nazywa się
- 18. Dlaczego nazywa się Overlapped I/O?
- 19. Dlaczego std :: cout zamiast po prostu cout?
- 20. A() = A() - dlaczego się kompiluje?
- 21. dlaczego mój invoke z Canvas.drawText() po prostu nie działa
- 22. Fragment onResume nie nazywa się
- 23. Funkcja Templated nie nazywa się
- 24. Android onPreviewFrame nie nazywa się
- 25. To, co się nazywa po metoda onConfigurationchanged()
- 26. Dlaczego mój mongodb nazywa się tak wolno?
- 27. Dlaczego nie możemy po prostu użyć tablic zamiast varargs?
- 28. Dlaczego warto używać wtyczki sonaru dla Jenkinsa, a nie po prostu używać maven goal "sonar: sonar"?
- 29. Dlaczego plik binarny glibc nazywa się libc.so.6 a nie libc.so.1 lub libc.so.4?
- 30. Dlaczego funkcja zadeklarowana w prototypie nie nazywa się?
Możesz chcieć zobaczyć, kiedy standard ANSI został napisany i kiedy MS dodał pochar do swojego kompilatora. Możliwe, że wchar_t rozróżnia to i wchar, który obsługuje MS. Mogę się mylić, więc zrobię to jako komentarz, więc nie będę przegłosowany. :) –
Mam wrażenie, że standardowe komitety nie dbają o to, co robi MS, jak chciałby MS;) – Cogwheel