Содержит ли заголовочный файл iostream только объявления?
Нет.Он также содержит определения.Например, указано, что он включает <ios>
, который, среди прочего, определяет шаблоны классов, такие как std::basic_istream
.
Здесь также я включаю iostream.Это нормально?Поскольку я подозреваю, что если iostream содержит определения, это может привести к ошибке компоновки, связанной с несколькими определениями.
<iostream>
, а также все другие стандартные заголовки будут защищены средствами защиты заголовков или аналогичным механизмом дляубедитесь, что содержимое включено только один раз, несмотря на несколько макросов включения.Кроме того, они не будут содержать определения, которое не должно содержаться более чем в одной единице перевода в соответствии с правилом одного определения.
Итак, да: можно включать стандартные заголовки несколькораз.Как внутри единицы перевода, так и из нескольких отдельных единиц перевода.