命名空间

关键字 namespace 有根据上下文三种不同的含义:

  1. 如果后跟可选名称和括号括起的声明序列,它将定义新的命名空间或使用这些声明扩展现有的命名空间 。如果省略该名称,则名称空间是未命名的名称空间

  2. 如果后跟名称和等号,则声明名称空间别名

  3. 当以 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