命名空间
该关键字 namespace
有根据上下文三种不同的含义:
-
如果后跟可选名称和括号括起的声明序列,它将定义新的命名空间或使用这些声明扩展现有的命名空间 。如果省略该名称,则名称空间是未命名的名称空间 。
-
如果后跟名称和等号,则声明名称空间别名 。
-
当以
using
开头并后跟命名空间名称时,它形成一个 using 指令 ,该指令允许通过非限定名称查找找到给定命名空间中的名称(但不会在当前范围中重新声明这些名称)。一个 using 指令不能在类范围内发生。
using namespace std;
气馁。为什么?因为 namespace std
很大! 这意味着名称碰撞的可能性很大:
//Really bad!
using namespace std;
//Calculates p^e and outputs it to std::cout
void pow(double p, double e) { /*...*/ }
//Calls pow
pow(5.0, 2.0); //Error! There is already a pow function in namespace std with the same signature,
//so the call is ambiguous