This question already has an answer here:
Here is my code:
#include <iostream>
int main(int argc, char const *argv[])
{
std::string s = "hello";
std::cout << s.size() << std::endl;
return 0;
}
To my surprise, I can compile and run it with clang++
, though I even don't add #include <string>
.
So, is it necessary to add #include <string>
in order to use std::string
?
In short: yes, it is necessary.
Parts of standard library often use other parts, so
<string>
was included somehow through<iostream>
, and your code compiles nicely.If you accidentally decide that you don't need
<iostream>
anymore and remove that include,<string>
will be implicitly removed, too, and you get a confusing compilation error. That's why it is a good practice to put all necessary includes.Your implementation's
iostream
header includesstring
. This is not something which you can or should rely on. If you want to usestd::string
, you should always#include <string>
, otherwise your program might not run on different implementations, or even in later versions of your current one.iostream includes
<string>
. It ripples through.Well actually that's implementation dependant and not a guarantee. You should explicitly include the headers you need.
Some header might include other headers, but that's an implementation issue and not something you can count on. Always explicitly include the headers you need.