概述
在c/c++中,變數、函式和後面要學到的類都是大量存在的,這些變數、函式和類的名稱將都存在於全域性作用域中,可能會導致很多衝突。使用命名空間的目的是對識別符號的名稱進行本地化,以避免命名衝突或名字汙染,namespace關鍵字的出現就是針對這種問題的。
命名空間的建立
namespace n1 //命名乙個n1的空間
}namespace n2
namespace n3 }
}namespace n1
}
命名空間的使用:
乙個命名空間就定義了乙個新的作用域,命名空間中的所有內容都侷限於該命名空間中
namespace n1 //命名乙個n1的空間
//乙個命名空間就定義了乙個新的作用域,命名空間中的所有內容都侷限於該命名空間中
//在空間外無法直接呼叫空間變數及函式
using n1:
:_year;
//1.使用using [空間命] :: [變數] 來將空間變數進行引入
intmain()
//2.加[空間命] :: [變數]
intmain()
//3.使用using namespace 命名空間名稱引入,將命名空間全部展開,變得像正常變數一樣可以隨意呼叫
//但這樣一旦你在命名空間內定義的和關鍵字一致的變數就會導致二者衝突
namespace n
using namespace n;
//將空間 n 完全展開
intmain()
#include
#include
#include
#include
using
namespace std;
namespace fun};
classa}
private
://在編譯器眼裡,這裡也是const str_cmp,所以前面要const
std::map<
const
char*,
const
char
*, str_cmp> its;};
}using
namespace fun;
//如展開std一樣,這裡展開fun
intmain()
使用cout標準輸出(控制台)和cin標準輸入(鍵盤)時,必須包含< iostream >標頭檔案以及std標準命名空間。
注意:早期標準庫將所有功能在全域性域中實現,宣告在.h字尾的標頭檔案中,使用時只需包含對應標頭檔案即可,後來將其實現在std命名空間下,為了和c標頭檔案區分,也為了正確使用命名空間,規定c++標頭檔案不帶.h;舊編譯器(vc 6.0)中還支援格式,後續編譯器已不支援,因此推薦使用 < iostream >+std的方式。
使用c++輸入輸出更方便,不需增加資料格式控制,比如:整形–%d,字元–%c
#include
using namespace std;
//c++的標準輸入/輸出函式存放在std命名空間中,這樣是將std完全展開,方便操作,也可用1,2方法去操作
intmain()
命名空間 Python 函式命名空間及作用域
全域性命名空間 個人寫的 但不是函式中的 區域性命名空間 函式 各級別命名空間之間使用關係 def max l print in max func print max 1,2,3 def func s func 函式的記憶體位址 函式名 函式的呼叫 函式的記憶體位址 函式的呼叫 print in m...
c 作用域及命名空間
什麼是作用域 每乙個變數 函式 陣列 結構體 類 等實體都有其自己有效的作用範圍,這就是變數的作用域。在區域性變數中,區域性變數只在定義的函式範圍內有效 即從變數定義開始到函式結束被釋放。int fun a的作用域結束 在全域性變數中,全域性變數的作用域為從定義變數的位置開始到本原始檔結束。若全域性...
c 作用域及命名空間
什麼是作用域 每乙個變數 函式 陣列 結構體 類 等實體都有其自己有效的作用範圍,這就是變數的作用域。在區域性變數中,區域性變數只在定義的函式範圍內有效 即從變數定義開始到函式結束被釋放。int fun a的作用域結束 在全域性變數中,全域性變數的作用域為從定義變數的位置開始到本原始檔結束。若全域性...