Jaka jest różnica między iostream
i iostream.h
?Różnica między iostream i iostream.h
Odpowiedz
iostream.h
jest przestarzała przez kompilatory, które ją dostarczają, iostream
jest częścią standardu C++.
W tekście nie ma żadnej wzmianki o iostream.h
w obecnym standardzie C++ (INCITS ISO IEC 14882 2003).
Edytuj: Jak wspomniała firma @Jerry, nie tylko obecny standard nie wspomina o tym, ale nie wymienia go żaden standard dla C++.
iostream jest standardowym nagłówkiem. iostream.h to niestandardowy nagłówek, który był bardzo powszechny w przed-standardowym C++ i jest tym, z którego wyewoluował iostream. Nadal powszechne jest posiadanie iostream.h wokół, prawdopodobnie do użytku ze starszymi programami.
Jeśli realizacja mieć kopię roboczą iostream, to prawdopodobnie taki sam jak iostream wyjątkiem tego, że wszystko jest w iostream w przestrzeni nazw std
, natomiast iostream zazwyczaj poprzedzone nazw, a nie ich używać.
Jeśli realizacja posiada zarówno iostream i iostream, iostream jest prawdopodobne, aby pracować jak:
namespace std
{
#include <iostream.h>
}
chociaż to niekoniecznie jak jest napisane.
W rzeczywistości często występuje * dużo * więcej różnic - strumienie w iostream.h zazwyczaj nie były szablonami podobnymi do tego, które znajdują się w systemie iostream. Jeśli robisz dużo więcej niż proste czytanie i pisanie (np. Zapisuj dowolne manipulatory) różnica jest często znaczna. –
@Jerry: Masz rację, ale niestety przywołujesz wspomnienia z systemu, który musiałem przerobić, który miał jakieś źle udokumentowane czary na strumieniach. Jednak nie musi to oznaczać znaczącej różnicy między wersją iostream.h i iostream we współczesnej implementacji. Jeśli pamiętam, przyjrzę się mojej implementacji gcc, kiedy wrócę do domu. –
tak, dlatego skomentowałem gdzie indziej, że różnice między iostream i iostream.h różnią się znacznie. W niektórych wersjach iostream.h jest obecną implementacją z deklaracjami "using" dla całej zawartości. W innych przypadkach jest to stara implementacja (i kilka, coś pomiędzy ...) –
Po utworzeniu C++ wszystkie pliki w standardowej bibliotece środowiska wykonawczego zakończyły się na .h. Życie było spójne i było dobrze. Oryginalna wersja cout i cin mieszkała w iostream.h. Kiedy język został ustandaryzowany przez komisję ANSI, postanowili przenieść wszystkie funkcje w bibliotece środowiska wykonawczego do przestrzeni nazw standardowych (co jest generalnie dobrym pomysłem). Jednakże stanowiło to problem: gdyby wszystkie funkcje zostały przeniesione do przestrzeni nazw standardowych, żaden ze starych programów nie działałby dalej!
Aby spróbować obejść ten problem, zachowując zgodność wsteczną starszych programów, wprowadzono nowy zestaw plików nagłówkowych, które używają tych samych nazw, ale nie mają rozszerzenia .h. Te nowe pliki nagłówkowe mają wszystkie swoje funkcje wewnątrz standardowej przestrzeni nazw. W ten sposób starsze programy, które zawierają #include <iostream.h>
, nie muszą być przepisywane, a nowsze programy mogą #include <iostream>
.
Po dołączeniu pliku nagłówkowego ze standardowej biblioteki upewnij się, że używasz wersji innej niż .h, jeśli istnieje. W przeciwnym razie użyjesz wycofanej wersji nagłówka, która nie jest już obsługiwana.
Ponadto wiele bibliotek odziedziczonych po C, które wciąż były przydatne w C++, otrzymało prefiks c (np. Stdlib.h stał się cstdlib). Funkcjonalność z tych bibliotek została również przeniesiona do przestrzeni nazw standardowej, aby uniknąć nazwania kolizji.
Jednak przy pisaniu własnych plików nagłówkowych należy podać im wszystkie rozszerzenia .h, ponieważ kod ten nie będzie wstawiany do przestrzeni nazw standardowych.
Reguła: użyj wersji biblioteki innej niż h, jeśli istnieje, i uzyskaj dostęp do funkcji poprzez przestrzeń nazw standardu. Jeśli wersja nie .h nie istnieje lub tworzysz własne nagłówki, użyj .h wersji
- 1. Jaki jest związek między stacją nazw iostream a stacją nazw?
- 2. Różnica między sqrt i sqrtf
- 3. Różnica między putback() i unget()
- 4. Różnica między unwrapObservable i()
- 5. Różnica między "**/* /" i "** /"?
- 6. Różnica między | = i^= css
- 7. Composer.phar różnica między | i ||
- 8. Różnica między "% ~ dp0" i ". \"?
- 9. Różnica między ". +" I ". +?"
- 10. MySQL: Różnica między ",", "i"
- 11. Różnica między (++ i) oraz (i ++)
- 12. fatal error: iostream nie takiego pliku lub katalogu
- 13. Różnica kręgosłupa Różnica między CompositeView i CollectionView?
- 14. Jaka jest różnica między sizeof i alignof?
- 15. Różnica między strumieniem strstream i stringami
- 16. Różnica między logger.info i logger.debug
- 17. Różnica między fgets i fscanf?
- 18. Różnica między NSLog i DLog
- 19. Różnica między RoutedEventHandler i EventHandler
- 20. Różnica między obrysem i wypełnieniem?
- 21. Różnica między Parameters.Add i Parameters.AddWithValue
- 22. Różnica między Delegate.BeginInvoke i Thread.Start
- 23. Różnica między TVar i TMVar
- 24. Różnica między DatagramSocket i DatagramChannel
- 25. Różnica między intent.setClass() i intent.setComponent()
- 26. różnica między -lgcc_s i gcc
- 27. Różnica między string.ToLower i TextInfo.ToLower
- 28. Różnica między javax.sql i java.sql?
- 29. Różnica między paint() i paintcomponent()?
- 30. Różnica między app.all ("*") i app.use ("/")
Powinieneś chyba wspomnieć o przestrzeni nazw standardowej. – zdan
@Jerry: Zachowano sformułowanie, ale wyjaśniono znaczenie: –
@Jerry: Dzięki, dodał. –