我见过using namespace std;
的代码。这是否意味着如果我们使用它,那么我们不必在代码中包含头文件,或者如果我们不使用命名空间,是否意味着我们必须在每个函数,类之前使用std::
?
答案 0 :(得分:7)
您必须包含头文件并使用名称空间。
名称空间包含在头文件中,cin
,cout
等io流包含在namespaces
中。因此,只有包含头文件时,才能使用名称空间。如果没有using namespace std
,则每次使用这些函数时都必须使用范围解析运算符。
答案 1 :(得分:1)
using namespace std;
表示可以使用std
命名空间中的所有名称,而无需明确指定其名称空间(使用std::
前缀)。也就是说,在using namespace std;
之后,string
和std::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中的知识水平。
我知道有些人会说“嗯,这是一项艰苦的工作”,但对我而言,这是一个很好的妥协,一点。 :)
请勿忘记添加必要的标题文件请: - )