名稱空間

關鍵字 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