<iostream> a <string>

0

Mam trywialne pytanie. Wiem że dołączanie <string> z biblioteki standardowej umożliwia korzystanie z klasy string. I wiem, że <iostream> umożliwia tworzenie zmiennych typu std::string. Mam zatem dwa pytania, bo nie mogłem się doczytać czy <iostream> zawiera automatycznie <string>, czy może ta cała "sztuczka" polega na czymś innym?
Drugie pytanie to czy dołączenie <iostream> jednocześnie umożliwia korzystanie z wszystkich składników (jak np metody) z klasy string?
No i tak na marginesie, czy znacie jakieś inne (może nie aż takie popularne, ale treściwe) źródła do informacji o C++ - coś na zasadzie dokumentacji - nie licząc cplusplus.com i msdn? Podkreślam, że nie chodzi mi o strony z jakimiś kursami do C++, czy z artykułami, tylko dokumentacje.

2

Jak chcesz uzywac std::string to dolaczaj <string> po prostu.

http://en.cppreference.com/w/

0

Nie chodzi mi o to. Chodzi mi o to, czy nagłówek <iostream> ma jakieś powiązanie z <string>, skoro dołączając <iostream> można korzystać z klasy std::string.

2

Śliska sprawa. Standard nie wymaga dołączenia nagłówka string do iostream. Natomiast metoda ios_base::getloc zwraca jako wartość locale, które ma metodę name zwracającą nasz string. Więc musi o nim wiedzieć. Natomiast tutaj sprawa się komplikuje, bo nie musi natomiast znać wszystkiego, co jest w nagłówku string.
I z tego powodu taki kod się powinien skompilować w GCC, ale nie skompiluje się w MSVC:

#include <iostream>
int main() { std::string foo = "bar"; std::cout << foo; }

Także ogólna zasada jest taka: jeżeli chcesz z czegoś skorzystać i to coś ma swój nagłówek, a standard nie gwarantuje, że dołącza go coś, co już załączyłeś - dołącz ten właściwy!

0

Osobiście na samym początku właśnie przypuszczałem, że to dlatego że <iostream> mógł uwzględniać <string>, tak samo jak wiele nagłówków automatycznie dołącza inne. W każdym razie dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1