我想知道把using namespace std;
放在哪里。我在using namespace std;
中看到了int main(){}
的代码,但我将其放在#include <iostream>
之后。我应该把它放在哪里,它在我把它放在哪里有什么不同?
答案 0 :(得分:14)
在函数内添加它只会将using语句的范围限制为该函数。您不应该在标头内放置using
语句,以避免头文件用户发生冲突。
如果您知道不会发生冲突,那么将它置于文件范围的主要位置就可以了,但即使这样也可能导致其他导入类型出现问题,并且通常在中等大小的项目中要避免。我尽量避免污染全局命名空间,但如果我正在编写一个一次性的小实现文件,我会在顶部添加using namespace std;
以方便使用。
在您的情况下,假设您只想使用std::cout
和std::cin
(仅举例),您可以这样做:
using std::cout;
using std::cin;
现在,您可以在不完全限定类型/对象的情况下编写cin >> whatever
和cout << whatever
,并且还可以避免污染全局命名空间。
答案 1 :(得分:11)
你把它放在巨大的区别。
如果你把它放在一个函数中,那么它只适用于那个函数。
如果将它放在全局范围内的函数之外,则它适用于该点之后的所有内容。
如果将它放在头文件中的全局范围内的函数之外,它甚至会应用于包含该标题的ever文件。
一般来说,在标题中将它用于全局范围是非常糟糕的做法,而在全局范围内使用它是半坏的做法,因为在Unity builds中,标题和源文件之间的区别是模糊的。< / p>
您最好只在您需要的函数中使用它,甚至根本不使用它,只需在标准库函数/类前加std::
。
答案 2 :(得分:6)
一般情况下(尤其是在大型项目中),最好not to use it at all。
答案 3 :(得分:6)
using
指令是作用域的,所以它只在它出现的范围内有效。在适合您情况的任何地方使用它。
答案 4 :(得分:2)
如果你不喜欢在任何地方输入std ::(我这样做,在我的代码中找不到足够的双冒号!),最佳做法是选择性地将你想要的名字导入范围,如下所示:
void some_function()
{
using std::vector;
vector<int> x;
...
}
在全球范围内也可以use
选择名称。
这样,您就不会将标准库中的所有名称都拉到全局名称空间中。
答案 5 :(得分:0)
无论你把它放在哪里,它都会将std
中的所有内容都放入范围。如果它在文件范围内,它在文件中的任何位置计数,如果它在函数中,它只适用于函数 - 所以它取决于你想要的。就个人而言,我不喜欢声明using namespace std
。
答案 6 :(得分:0)
很多人会说你根本不应该使用它。原因是如果你不小心定义了一个已经存在于std命名空间中的函数,可能会有冲突,对于非常大的项目,这可能很难被追踪。对于琐碎的程序来说,老实说这不是一个大问题,但是你把它放在哪里确实有所作为。
在全球范围内,它适用于所有地方。在本地范围内(即仅在main()中),它仅适用于main。
以下是一些替代方案
std::cout << "Hello, World!" << std::endl;
在本地函数中仅使用所需内容的示例:
int main()
{
using std::cout;
using std::endl;
cout << "Hello, World!" << endl;
return 0;
} // Obviously you need #include <iostream> at the top..