C++命名空间和头文件

C++ Namespaces and header files

本文关键字:文件 命名空间 C++      更新时间:2023-10-16

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

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

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

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

头文件仍然必须包括在内。

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

 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中的知识水平。

我知道有些人会说"这仍然是一项艰巨的工作",但对我来说,这是一个很好的妥协,在某种程度上。:)

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