Reputation: 941
I'm wondering where to put using namespace std;
. I saw a code with the using namespace std;
in the int main(){}
but I was putting it after #include <iostream>
. Where should I put it and does it make any difference where I put it?
Upvotes: 17
Views: 13717
Reputation: 54300
It makes a huge difference where you put it.
If you put it inside a function, then it only applies in that function.
If you put it outside a function in global scope then it applies to everything after that point.
If you put it outside a function in global scope in a header file then it will even apply to ever file that includes that header.
Generally, it's very bad practice to use it at global scope in a header, and semi bad practice to use it in global scope at all since in Unity builds, the distinction between headers and source files is blurred.
You would be best to just use it in the functions that you need it, or even not use it at all and just prefix standard library functions/classes with std::
.
Upvotes: 15
Reputation: 124790
Adding it inside of a function restricts the scope of the using statement to that function only. You should never put a using
statement inside of a header as to avoid conflicts for users of your header file(s).
Putting it above main in the file scope is fine if you know that no conflicts will arise, but even that may cause problems with other imported types and is generally to be avoided in moderately sized projects. I try to avoid pollution of the global namespace as much as possible, but if I am writing a one-off, small implementation file I will add a using namespace std;
at the top for convenience.
In your case, assuming you only want to use std::cout
and std::cin
(just an example), you can do this:
using std::cout;
using std::cin;
Now you can write cin >> whatever
and cout << whatever
without fully qualifying the type/object each time and you also avoid polluting the global namespace.
Upvotes: 17
Reputation: 3041
A lot of people here will say that you shouldn't be using it at all. The reason for this is there could be conflicts if you accidentally define a function that is already in the std namespace, for very large projects this could be difficult to track down. For trivial programs, it's honestly not that big of an issue, but where you put it does make a difference.
In the global scope, it applies everywhere. In a local scope (i.e, only in main()), it will only apply in main.
Here are some alternatives good alternatives
std::cout << "Hello, World!" << std::endl;
An example of using only things you want in a local function:
int main()
{
using std::cout;
using std::endl;
cout << "Hello, World!" << endl;
return 0;
} // Obviously you need #include <iostream> at the top..
Upvotes: 0
Reputation: 7127
If you don't like typing std:: everywhere (I do, can't get enough double-colons in my code!), best practice is to selectively import the names you want into scope like so:
void some_function()
{
using std::vector;
vector<int> x;
...
}
It is ok to also use
selected names at global scope.
This way you don't pull ALL of the names in the standard library into the global namespace.
Upvotes: 2
Reputation: 3509
It will bring everything in std
into scope wherever you put it. If its at file scope, it counts everywhere in the file, if its in a function, it only applies within the function - so it depends on what you want. Personally, I don't like declaring using namespace std
.
Upvotes: 0
Reputation: 477640
The using
directive is scoped, so it'll be in effect only within the scope in which it appears. Use it wherever it is most appropriate for your situation.
Upvotes: 7
Reputation: 25553
In general (and certainaly in large projects), it's best not to use it at all.
Upvotes: 8