C ++命名空间和头文件

时间:2013-06-27 06:54:45

标签: c++ namespaces

我见过using namespace std;的代码。这是否意味着如果我们使用它,那么我们不必在代码中包含头文件,或者如果我们不使用命名空间,是否意味着我们必须在每个函数,类之前使用std::

3 个答案:

答案 0 :(得分:7)

您必须包含头文件并使用名称空间。

名称空间包含在头文件中,cincout等io流包含在namespaces中。因此,只有包含头文件时,才能使用名称空间。如果没有using namespace std,则每次使用这些函数时都必须使用范围解析运算符。

答案 1 :(得分:1)

using namespace std;表示可以使用std命名空间中的所有名称,而无需明确指定其名称空间(使用std::前缀)。也就是说,在using namespace std;之后,stringstd::string都有效。如果没有using namespace std;,则只有std::string可以使用。

仍然必须包含头文件。

请注意,经常不鼓励使用using namespace,因为它会使用该命名空间中的所有名称填充代码,并且可能会发生冲突。

答案 2 :(得分:1)

 using namespace std;

我不是一个理想的做法,我会在专业代码库中应用。原因是它实际上“打开”std命名空间(如果你愿意,可以用Java编写),你可能正在做“Hello world”ish编程,即不像RT Embedded,Mission Critical或Safety Critical那么严重。例如,我在Interservice / Industry Training and Simulation工作,其中通常是安全/关键任务;如果我公开使用多个命名空间,那么人们可能会对我说一句话。这不是关于程序的大小,而是关于良好实践。是的,如果您从std命名空间中使用了很多东西,那么您可以简单地使用它。妥协,也是我有时做的,是:

using std::endl;
using std::string;
using std::cout;
using std::cin;
// And something like that

这会“暴露”您对此范围所需的内容,并且仍允许您使用:

string myStr;
cout << "Some cout" << endl;

就像你在问题中提到的一样。为什么不试试呢?

“好一点”的是,如果你按照我提到的方法,它还“升级”你在C ++名称空间和可能的STL中的知识水平。

我知道有些人会说“嗯,这是一项艰苦的工作”,但对我而言,这是一个很好的妥协,一点。 :)

请勿忘记添加必要的标题文件请: - )