używam MS Visual Studio 2012 i w nim, < iostream>
obejmuje <istream>
który obejmuje <ostream>
który obejmuje <ios>
który obejmuje <xlocnum>
. <xlocnum>
obejmuje <cstdlib>
, więc program obejmuje pośrednio <cstdlib>
Chociaż sekwencja obejmuje mogą być różne w innych kompilatorów i/lub implementacji, że powodem tego jest to, że kod działa <iostream>
, bezpośrednio lub pośrednio obejmuje <cstdlib>
.
Należy zauważyć, że biblioteki, które obejmuje iostream
, są specyficzne dla implementacji i kod może nie zostać skompilowany w innym kompilatorze. Zasadą jest, że biblioteki zawarte w pliku nagłówkowym zwykle nie są dobrze udokumentowane lub stanowią część standardów, więc nie należy opierać się na plikach pośrednich. Jeśli potrzebujesz biblioteki, dołącz ją bezpośrednio, a ponieważ biblioteki standardowe to include guarded, nie będzie żadnych znaczących overhead kompilacji programu lub jego pracy.
Wygląda na to, że 'cstdlib' jest zawarty przez' iostream'. Wydaje się, że tak jest przynajmniej w przypadku GCC 4.7.3. – juanchopanza
Twoje pytanie wydaje się być częścią ogólnego (błędnego) zrozumienia, że kiedy dokumentacja mówi "Jeśli robisz X, możesz zrobić Y", zakładasz, że masz gwarancję, że nie wykonywanie X powoduje, że Y jest błędem. Tak nie jest przez większość czasu. Nadal musisz zrobić X, aby * udowodnić, że Y jest zgodny z prawem. –