关于“使用命名空间标准”的问题?

时间:2019-04-21 06:26:06

标签: c++

最近我注意到,如果我在程序中不包括“ using namespace std”,而仅使用“ std :: cout”或“ std :: endl”,那么我的程序仍然可以编译吗?因此,如果我使用'std ::'前缀,是否甚至需要包括'using namespace std'? “ std ::”前缀是否调​​用using名称空间std?如果有人可以帮我解决这个问题,将不胜感激。

2 个答案:

答案 0 :(得分:5)

在C ++中,::被称为“范围分辨率运算符”,因此std::cout的意思是“变量cout,可以在std内找到”。

using namespace std;指令的意思是“对于您找不到的任何名称,也请尝试在std中查找它”。因此,如果您明确地说出std::cout(并且等效于std名称空间中的所有其他内容),则不需要using namespace std


正如其他人所说,使用using namespace std;通常被认为是不好的风格,因为std中的许多名称都是您可能想在其他地方使用的东西,例如std::count。一个折衷的选择是改为说using std::cout;,这将告诉编译器在cout中寻找std,而不要寻找其他任何东西。

关于在主要C ++文件中需要的任何地方说using std::cout还是只写std::cout一直存在争议,但是大多数人认为您很少使用using namespace。但是,如果要编写头文件,则应该从不在顶层使用using指令,因为包含您的文件的每个文件都将得到它,他们可能想使用其他名称。

答案 1 :(得分:0)

使用时:

using namespace std;

你告诉程序它找不到的任何东西都应该在命名空间 std 中。对于较大的程序,这是一个问题,因为您可能使用具有相同名称的函数的多个命名空间,因此对于较大的程序最好使用 std::cout