在哪里使用命名空间std;

Hik*_*aki 13 c++ namespaces using-directives

我想知道放在哪里using namespace std;.我看到的代码using namespace std;int main(){} ,但我以后把它#include <iostream>.我应该把它放在哪里,它在我放的地方有什么不同吗?

Ed *_* S. 14

在函数内部添加它只会将using语句的范围限制为该函数.您不应该using在标头内放置语句,以避免头文件用户发生冲突.

如果您知道不会发生冲突,那么将它置于文件范围的main之上是好的,但即使这可能会导致其他导入类型出现问题,并且通常在中等大小的项目中要避免.我尽量避免污染全局命名空间,但如果我正在编写一个一次性的小实现文件,我会using namespace std;在顶部添加一个以方便起见.

在您的情况下,假设您只想使用std::coutstd::cin(只是一个示例),您可以这样做:

using std::cout;
using std::cin;
Run Code Online (Sandbox Code Playgroud)

现在,您可以在每次完全限定类型/对象的情况下进行编写cin >> whatever,cout << whatever也可以避免污染全局命名空间.


Pet*_*der 11

你把它放在哪里会产生很大的不同.

如果你把它放在一个函数中,那么它只适用于那个函数.

如果将它放在全局范围内的函数之外,则它适用于该点之后的所有内容.

如果将它放在头文件中的全局范围内的函数之外,它甚至将应用于包含该头的ever文件.

一般来说,在标题中将它用于全局范围是非常糟糕的做法,而在全局范围内使用它是半坏的做法,因为在Unity版本中,标题和源文件之间的区别是模糊的.

您最好只在您需要的函数中使用它,甚至根本不使用它,只需在标准库函数/类前加上std::.


Jam*_*mes 6

一般而言(特别是在大型项目中),最好不要使用它.


Ker*_* SB 6

using指令是作用域的,因此它只在它出现的范围内有效.在适合您情况的任何地方使用它.