frosty7777777
@frosty7777777

Когда заголовок iostream заменяет другие заголовки, например, string?

В учебниках по C++ написано, что для того, чтобы использовать строковой тип, необходимо подключить соответсвующий заголовок. Но на приктике, если подключить только iostream, код, использующий строки, компилируется и работает без проблем.

Например, данный код будет успешно работать:

#include <iostream>

// работает без подключения заголовка
// #include <string>

using namespace std;

int main() {
	string s = "hello";
	cout << s << endl;
	return 0;
}


Это можно заметить и при работе с фукнкциями из некоторых других заголовков.

Итак, как понять, когда нужно, а когда не нужно указывать заголовок при использовании той или иной функции?

UPD: Будет ли работать код без определенного заголовка на другом компиляторе на другой машине?
  • Вопрос задан
  • 314 просмотров
Решения вопроса 1
TrueBers
@TrueBers
Гуглю за еду
Однозначно нужно подключать всё как положено. Совсем не факт, что какой-то другой компилятор будет у себя подключать где-то этот самый string.h. Точно так же может смениться реализация в другой версии, и всё поломается.

По сути, работает оно по чистой случайности. Всегда подключайте необходимый заголовок. Проще всего смотреть на сайте C++ Reference. Там для каждого класса есть вверху строка Defined in header <...>. Вот этот хедер и подключайте всегда, будет работать в 99% компиляторов. А чтобы не замедлялась скорость сборки, добавляйте часто используемые заголовки в precompiled header.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
iostream явно или еще через какой-то header включает string. Лучше всегда явно включать то, что вы используете. Так при модификации кода будет вылезать меньше ошибок.
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Собирается - не нужно. Не собирается - нужно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы