5

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

4

3 回答 3

7

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

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

于 2013-06-27T06:59:29.050 回答
1

using namespace std;意味着std可以使用命名空间中的所有名称,而无需明确指定它们的命名空间(带std::前缀)。也就是说,在 之后using namespace std;,两者stringstd::string都是有效的。没有using namespace std;,只有std::string工作。

仍然必须包含头文件。

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

于 2013-06-27T07:00:40.363 回答
1
 using namespace std;

并不是我在专业代码库中应用的理想实践。原因是它实际上“打开”了std命名空间(如果您愿意,可以使用 Java 中的包),您可能在其中进行“Hello world”编程,即不像 RT Embedded、Mission Critical 或 Safety Critical 那样严格。例如,我在跨服务/行业培训和模拟工作,其中的事情通常是安全/关键任务;如果我如此公开地使用多个命名空间,人们可能会对我说悄悄话。这与您的程序的大小无关,更多的是关于良好实践。是的,如果您在命名空间中有很多东西要使用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 方面的知识水平。

我知道有些人会说“嗯,这仍然很辛苦”,但对我来说,这是一个很好的妥协,在某种程度上。:)

请不要忘记添加必要的头文件 :-)

于 2013-06-27T07:29:57.370 回答