一,命名空間(namespace)的基本概念以及由來
1.什麼是標識符:
在C++中,標識符可以是基本的變量,類,對象,結構體,函數,枚舉,宏等。
2.什麼是命名空間:
所謂的命名空間是指標識符的可見范圍。C++標准庫中的所有的標識符都被定義在一個名為std的命名空間中。
3.C語言的命名空間:
在C語言中只有一個全局作用域,因此在C語言中所有的標識符共享一個命名空間,因此隨著代碼量的增大,標識符之間可能會重名。由此會造成一些命名問題。
4.針對C語言的問題,在C++中提出了命名空間的概念:
1.命名空間將全局作用域劃分成不同的的部分。
2.不同的命名空間中的標識符可以重名而不會發生沖突。
3.全局作用域也叫做默認命名空間。
4.命名空間之間可以相互嵌套。
二,命名空間(namespace)的定義以及使用
1.命名空間的定義:
namespace 命名空間名稱 { ...... }
2.命名空間的使用:
using namespace name; // 使用name這個命名空間 using namespace name::variable; // 使用name這個命名空間下的variable std::cout << "Hello,NameSpace" << std::endl; // 直接使用這個命名空間中的標識符 ::tmp = 0; // 使用默認命名空間的變量,默認情況下可以直接使用默認命名空間的所有標識符
3.域作用符::
域作用符用兩個冒號(::)表示,用來訪問命名空間下的標識符。
三,命名空間(namespace)實際案例
# include<iostream> /* 定義命名空間n1 */ namespace n1 { /* 定義學生類 */ class Student { public: char name[64]; int age; }; /* 定義函數 */ void printN1() { std::cout << "我是n1命名空間的printN1()" << std::endl; } /* 定義命名空間n2 */ namespace n2 { /* 定義變量n */ int n = 0; } } // 在默認命名空間下定義變量a int a = 100; int main() { // 使用命名空間n1,曝光n1的所有標識符,因此可以調用printN1()函數 using namespace n1; printN1(); // 使用命名空間n2,曝光n2的所有標識符,因此可以使用變量n using namespace n1::n2; // 直接使用指定命名空間下的標識符 std::cout << n << std::endl; // 使用域作用符訪問默認命名空間下的標識符 ::a = -100; }