淺談命名空間

一、使用命名空間的目的
爲了在同一個作用域中有兩個或多個同名的實體,爲了解決命名衝突 ,C++中引入了命名空間,所謂命名空間就是一個可以由用戶自己定義的作用域,在不同的作用域中可以定義相同名字的變量,互不干擾,系統能夠區分它們。

二、什麼是命名空間
每個名字空間都是一個名字空間域,存放在名字空間域中的全局實體只在本空間域內有效。名字空間對全局實體加以域的限制,從而合理的解決命名衝突。
在聲明一個命名空間時,花括弧內不僅可以包含變量,而且還可以包含以下類型:
變量(可以帶有初始化)
常量
函數(可以是定義或聲明)
結構體

模板
命名空間(命名空間可以嵌套定義)
例:
namespace ns1
{
int a;
char c = 10;
void Fun();
int Add(int a, int b)
{
return a + b;
}
namespace ns2
{
int b;
}
}

三、使用命名空間的方法

1、在引用命名空間成員時,要用命名空間名和作用域解析符對命名空間成員進行限定,以區別不同的命名空間中同名標識符。即 命名空間名::命名空間成員名

2、還可以給命名空間取別名
例:
namespace Television
{…}
namespace Tv=Television;
則Tv就是命名空間Television的別名,在以後用到Television的地方都可以用Tv進行替換。

3、使用using命名空間成員名
using後面的命名空間成員名必須是有命名空間限制的名字。
例:using ns1::a;
以上語句表明,在using的作用域內如果使用到ns1中的成員a,則不必再用命名空間限定。在以後的程序中如果用到a,則隱含的指ns1::a。 using聲明的作用域是從using語句開始,到using所在的作用域結束。要注意,在同一作用域內用using聲明的不同的命名空間的成員不能有同名的成員,否則會發生重定義。

4、使用using namespace 命名空間名
第三條介紹的using命名空間成員名,一次只能聲明一個命名空間成員,如果一個命名空間中有多個變量,就需要多次使用using命名空間成員名。C++中還提供了using namespace 語句來實現一次聲明一個命名空間內的全部成員。
例如:
using namespace ns1;
聲明瞭在本作用域中要用到命名空間ns1中的成員,在使用該命名空間內的任何成員時都不必使用命名空間限定。在用using namespace聲明的作用域中,命名空間ns1的成員好像在全局域中聲明的一樣,因此不用加命名限定。

4、無名的命名空間
例:
namespace
{
void fun();
}

由於沒有名字,所以其它文件無法引用,它只能在本文件的作用域內有效,它的作用域使重無名命名空間聲明開始到本文件結束。在本文件使用無名命名空間成員時不必用命名空間限定。其實無名命名空間和static是同樣的道理,都是隻在本文件內有效,無法被其它文件引用。

5、標準命名空間
C++庫的所有標識符都是在一個名爲std的命名空間中定義的,或者說標準頭文件(iostream)中的函數、類、對象和類模板是在命名空間std中定義的。所以在C++程序的一開始,就用using namespace對std進行全局聲明。

發佈了47 篇原創文章 · 獲贊 24 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章