where to put using namespace std;

落爺英雄遲暮 提交于 2019-11-29 17:33:36

问题


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?


回答1:


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::.




回答2:


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.




回答3:


In general (and certainaly in large projects), it's best not to use it at all.




回答4:


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.




回答5:


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.




回答6:


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.




回答7:


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

  • Put std:: before everything i.e, std::cout << "Hello, World!" << std::endl;
  • Only use the specific thing you want inside a function.

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..


来源:https://stackoverflow.com/questions/6474756/where-to-put-using-namespace-std

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!