Должен ли я использовать #include <string> рядом с <iostream>?
Я начал изучать С++, и я прочитал книгу, которая пишет, что я должен использовать заголовочный файл <string>
, потому что строковый тип не встроен непосредственно в компилятор.
Если я использую <iostream>
, я могу использовать тип строки.
Нужно ли включать заголовок <string>
, когда я хочу использовать тип строки, если я включил заголовок <iostream>
? Зачем? Есть ли разница?
Ответы
Ответ 1
Да, вы должны включить то, что используете. Он не требует, чтобы стандартные заголовки включали друг друга (за некоторыми исключениями, IIRC). Теперь он может работать, но может произойти сбой в другом компиляторе.
В вашем случае, очевидно, <iostream>
включает <string>
, прямо или косвенно, но не полагается на него.
Ответ 2
Нужно ли включать заголовок <string>
, когда я хочу использовать строковый тип, если я включил заголовок <iostream>
?
Да, вам нужно. Вы не можете полагаться на соответствующие заголовки (например, <string>
), являющиеся #include
d косвенно через другие заголовки (например, <iostream>
), хотя это может иметь место в некоторых реализациях.
И даже если это может показаться сработавшим, это может привести к проблемам, если не все импортируемые переменные некоторых операторов импортированы или если класс объявлен в заголовке #include
, но информация об этом класс, полученный из некоторого другого класса, содержится только в заголовке, который не получает #include
d.
См., например, fooobar.com/info/351240/... для примера таких ситуаций.