您好,登錄后才能下訂單哦!
這篇“C++中的命名空間實例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C++中的命名空間實例分析”文章吧。
首先熟悉一下命名空間的兩個概念。
聲明區域:可以在其中進行聲明的區域,如全局文件的聲明區域是文件,函數內聲明的變量聲明區域為代碼塊。潛在作用域:潛在作用域從聲明點開始,到其聲明區域的結尾。因此潛在作用域比聲明區域小,因為變了必須定義后才能使用。
這兩個概念通過下圖很好理解,也是編程的常識。
可以使用如下語法聲明命名空間和空間成員
namespace Jack { double a; struct b {}; void f(); }
如果未在顯式命名空間中聲明某個標識符,則該標識符屬于隱式全局命名空間的一部分。 一般情況下,嘗試避免在全局范圍內進行聲明(入口點 Main 函數除外,它必須位于全局命名空間中)。
全局命名空間可以是用 ::var
來調用。
即同一個命名空間可以在多個文件中定義,如
file1.cpp
namesapce A { int a; }
file2.cpp
namesapce A { int b; }
在編譯時會將分散在各個文件中的同一個命名空間集合在一起。
命名空間也是可以嵌套的
namespace A { namespace B {} }
using聲明將特定的名稱添加到它所屬的聲明區域中,例如using A::a;
,相當于 Java 中的靜態導入,而using 編譯指令使名稱空間的所有名稱都可以用,而不需要使用作用于解析符,如 using namespace std;
,作用相當于 Java 中的。import java.util.*
。這里記錄一下注意點。
using A::pal; using B::pal; // error declaration conflict pal = 4;
上述代碼會引起沖突。
一般而言使用using聲明會更安全點。
命名空間名稱必須是唯一的,這意味著通常它們不應太短。 如果名稱的長度使代碼難以讀取,或在不能使用 using 指令的標頭文件中鍵入枯燥,則可以創建一個命名空間別名作為實際名稱的縮寫。 例如:
namespace a_very_long_namespace_name { class Foo {}; } namespace AVLNN = a_very_long_namespace_name; void Bar(AVLNN::Foo foo){ }
#include <iostream> using namespace std; namespace A { int a = 100; namespace B //嵌套一個命名空間B { int a = 20; } } int a = 200;//定義一個全局變量 int main(int argc, char *argv[]) { cout << "A::a =" << A::a << endl; cout << "A::B::a =" << A::B::a << endl; cout << "a =" << a << endl; cout << "::a =" << ::a << endl; int a = 30; cout << "a =" << a << endl; cout << "::a =" << ::a << endl; return 0; }
output:
A::a =100
A::B::a =20
a =200
::a =200
a =30
::a =200
以上就是關于“C++中的命名空間實例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。