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.
<iostream> a <string>
- Rejestracja: dni
- Ostatnio: dni
- Postów: 196
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2412
Jak chcesz uzywac std::string to dolaczaj <string> po prostu.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 196
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.
- Rejestracja: dni
- Ostatnio: dni
Ś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!