问题
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
?
回答1:
Your implementation's iostream
header includes string
. This is not something which you can or should rely on. If you want to use std::string
, you should always #include <string>
, otherwise your program might not run on different implementations, or even in later versions of your current one.
回答2:
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.
回答3:
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.
回答4:
iostream includes <string>
. It ripples through.
Well actually that's implementation dependant and not a guarantee. You should explicitly include the headers you need.
来源:https://stackoverflow.com/questions/33349833/can-stdstring-be-used-without-include-string