Если вы используете члены, которые объявлены внутри стандартного заголовка string
, тогда да, вы должны включить этот заголовок прямо или косвенно (через другие заголовки).
Некоторые компиляторына некоторых платформах может * компилироваться некоторое время месяца, даже если вы не включили заголовок.Такое поведение неудачно, ненадежно и не означает, что вы не должны включать заголовок.
Причина заключается в том, что вы просто включили другие стандартные заголовки, которые также включают string
,Но, как я уже сказал, на это, в общем, нельзя полагаться, и это также может очень внезапно измениться (например, при установке новой версии компилятора).
Всегда включать все необходимые заголовки.К сожалению, не существует надежной онлайн-документации, в которую нужно включать заголовки.Обратитесь к книге или официальному стандарту C ++.
Например, следующий код компилируется с моим компилятором (gcc
4.6):
#include <iostream>
int main() {
std::string str;
}
Но если я удалю первую строку,он больше не компилируется, хотя заголовок iostream
на самом деле не должен быть связан.