namespace命名空間是C++中一個非常重要的概念,本文執行個體展示了namespace的相關文法,供大家參考。具體如下:
本段測試程式碼封裝括如下內容:
(1) 如何訪問namespace中聲明的名稱;
(2) namespace導致的相關衝突;
(3) namespace可嵌套;
(4) 可以在namespace中使用using聲明和using編譯命令;
(5) 未命名的namespace:其範圍為定義該namespace所在的聲明地區。C++推薦用來替代static定義靜態變數。
具體程式碼如下:
#include <iostream>using namespace std;namespace jerry{ int height; int weight; void showHeight(); string name;}//namespace jerry{ void showHeight() { cout<<"Method 3: Jerry height: "<<height<<" kg"<<endl; }}namespace elements{ namespace fire { int flame; using namespace jerry; //(4) can use 'using' in namespace define using std::cout; } float water;}//(5) no name namespace//其範圍為定義時所在的聲明域,可用來替換static變數,這是C++標準推薦的行為namespace { string data;}void testFun();int main(){ cout<<"This code is to test namespace"<<endl; /*not allowed to define namespace in code segment //Error namespace jerry{ int height; int weight; } */ //(1) To access the data in namespace //Method 1: 範圍解析符 jerry::height = 165; cout<<"Method 1: Jerry height: " << jerry::height <<" cm"<<endl; //Method 2: using聲明 using jerry::weight; weight = 64; cout<<"Method 2: Jerry weight: " << weight<<" kg"<<endl; //Method 3: using編譯指令:All the define data in namespace jerry can be access. using namespace jerry; showHeight(); //(2) about name conflict { jerry::name = "Jerry"; string name = "Tom"; //using jerry::name; Error cout << "name: "<<name<<endl; /* This method will lead conflict with locall parameter using jerry::name; cout << "name: "<<name<<endl; */ cout << "name: "<<jerry::name<<endl; using namespace jerry; //局部變數會覆蓋jerry命名空間的name定義 cout << "name: "<<name<<endl; } //(3) namespace can nest elements::fire::flame = 2; using namespace elements::fire; //(5) no name namespace //其範圍為定義時所在的聲明域,可用來替換static變數,這是C++標準推薦的行為 data = "hello"; cout<<"No name namespace: data: " << data <<endl; testFun();}void testFun(){ /*not allowed to define namespace in code segment //Error namespace jerry{ int height; int weight; } */ //(5) no name namespace data = "hello in function"; cout<<"No name namespace: data: " << data <<endl;}
運行結果如下圖所示: