我见过带有using namespace std;
. 这是否意味着如果我们使用它,那么我们不必在代码中包含头文件,或者如果我们不使用命名空间,是否意味着我们必须std::
在每个函数、类之前使用?
3 回答
您必须包含头文件并使用命名空间。
命名空间包含在头文件中,io流之类的cin
,cout
包含在namespaces
.so中,只有包含头文件,才能使用命名空间。如果没有using namespace std
,则每次使用这些函数时都必须使用范围解析运算符。
using namespace std;
意味着std
可以使用命名空间中的所有名称,而无需明确指定它们的命名空间(带std::
前缀)。也就是说,在 之后using namespace std;
,两者string
和std::string
都是有效的。没有using namespace std;
,只有std::string
工作。
仍然必须包含头文件。
请注意,using namespace
通常不鼓励使用 of,因为它会使用该命名空间中的所有名称填充您的代码,并且可能会发生冲突。
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 方面的知识水平。
我知道有些人会说“嗯,这仍然很辛苦”,但对我来说,这是一个很好的妥协,在某种程度上。:)
请不要忘记添加必要的头文件 :-)