內容有所改動,示例**更加清晰明了。
假設這樣一種情況,當乙個班上有兩個名叫liming的學生時,為了明確區分它們,我們在使用名字之外,不得不使用一些額外的資訊,比如他們的家庭住址,或者他們父母的名字等等。
同樣的情況也出現在 c++ 應用程式中。例如,您可能會寫乙個名為 printabc() 的函式,在另乙個可用的庫中也存在乙個相同的函式 printabc ()。這樣,編譯器就無法判斷您所使用的是哪乙個 printabc () 函式。
因此,引入了命名空間這個概念,專門用於解決上面的問題,它可作為附加資訊來區分不同庫中相同名稱的函式、類、變數等。使用了命名空間即定義了上下文。本質上,命名空間就是定義了乙個範圍。用來處理程式中常見的同名衝突。
命名空間的定義使用關鍵字 namespace,後跟命名空間的名稱,如下所示:
namespace
namespace_name
// 命名空間作用域後面無須分號
為了呼叫帶有命名空間的函式或變數,需要在前面加上命名空間的名稱,如下所示:
namespace_name::code; // code 可以是變數或函式
#include
using
namespace
std;
namespace liming001
}namespace zhangsan002
}int main ()
當上面的**被編譯和執行時,它會產生下列結果:
inside liming001
inside zhangsan002
您可以使用using namespace指令,這樣在使用命名空間時就可以不用在前面加上命名空間的名稱。這個指令會告訴編譯器,後續的**將使用指定的命名空間中的名稱。
namespace_name::code; // code 可以是變數或函式
#include
using
namespace
std;
namespace liming001
}namespace zhangsan002
}using
namespace liming001;
int main ()
當上面的**被編譯和執行時,它會產生下列結果:
inside liming001
using 指令也可以用來指定命名空間中的特定專案。例如,如果您只打算使用 std 命名空間中的 cout 部分,您可以使用如下的語句:
using std::cout;
隨後的**中,在使用 cout 時就可以不用加上命名空間名稱作為字首,但是 std 命名空間中的其他專案仍然需要加上命名空間名稱作為字首,如下所示:
#include
using
std::cout;
int main ()
當上面的**被編譯和執行時,它會產生下列結果:
std::endl is used with std!
using 指令引入的名稱遵循正常的範圍規則。名稱從使用 using 指令開始是可見的,直到該範圍結束。此時,在範圍以外定義的同名實體是隱藏的。
命名空間可以定義在幾個不同的部分中,因此命名空間是由幾個單獨定義的部分組成的。乙個命名空間的各個組成部分可以分散在多個檔案中。
所以,如果命名空間中的某個組成部分需要請求定義在另乙個檔案中的名稱,則仍然需要宣告該名稱。下面的命名空間定義可以是定義乙個新的命名空間,也可以是為已有的命名空間增加新的元素:
namespace
namespace_name
命名空間可以巢狀,您可以在乙個命名空間中定義另乙個命名空間,如下所示:
namespace
namespace_name1
}
您可以通過使用 :: 運算子來訪問巢狀的命名空間中的成員:
// 訪問 namespace_name2 中的成員
using namespace
namespace_name1::namespace_name2;
// 訪問 namespace:name1 中的成員
using namespace
namespace_name1;
在上面的語句中,如果使用的是 namespace_name1,那麼在該範圍內namespace_name2 中的元素也是可用的,如下所示:
#include
using
namespace
std;
namespace beijingcity //命名空間,北京市
}namespace chaoyangdistrict //朝陽區
}void printmessage()
}using
namespace beijingcity::chaoyangdistrict;
int main ()
當上面的**被編譯和執行時,它會產生下列結果:
inside chaoyangdistrict
參考內容:
c++ 多型_w3cschool
c++命名空間 - - csdn部落格
C 命名空間通俗的解釋
通俗的解釋 using namespace std 這句的意思是 使用命名空間 std 比如 杭州有乙個西湖 潮州也有個西湖 如果你只說 西湖 可能別人就不知道你是說那裡的西湖 如果你說 杭州的西湖,別人就知道你是說杭州的西湖 這裡的杭州就好像是使用 using namespace std 如果是用...
svm通俗講解 SVM通俗講解
svm support vector machine 支援向量機相關理論介紹 基於資料的機器學習是現代智慧型技術中的重要方面,研究從觀測資料 樣本 出發尋找規律,利用這些規律對未來資料或無法觀測的資料進行 迄今為止,關於機器學習還沒有一種被共同接受的理論框架,關於其實現方法 大致可以分為 三種 3 ...
spring p命名空間 c命名空間
p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...