C 基礎6 命名空間

2022-05-23 15:06:09 字數 1801 閱讀 2420

背景:c++中,名稱可以是變數、函式、結構、列舉、類以及類和結構的成員。當隨著專案的增大,名稱相互衝突的可能性也將增加。例如許多廠商的類庫,可能導致名稱衝突。這種衝突被稱為命名空間問題。

解決措施:c++標準提供了命名空間工具;以便更好地控制名稱的作用域。

介紹一些術語,熟悉命名空間的概念

宣告區域(declaration region),是可以在其中進行宣告的區域。例如,可以在函式外面宣告全域性變數,對於這種變數,其宣告區域為其宣告所在的檔案。對於在函式中宣告的變數,其宣告區域為其宣告所在的**塊。

潛在作用域(potential scope),變數的潛在作用域從宣告點開始,到其宣告區域的結尾為止。因為變數必須先定義後使用。

作用域(scope),變數並非在其潛在作用域都是可見的,它可能被另乙個巢狀宣告區域中的宣告的同名變數隱藏。變數對程式可見的範圍被稱為作用域。

c++通過定義一種新的宣告區域來建立命名的命名空間,提供一種宣告名稱的區域。

新的關鍵字namespace

舉例:建立兩個命名空間jack和jill

namespace jack;

}namespace jill;

}命名空間是開放的,即可以把名稱加入到已有的命名空間中。

namespace jill

還有一種方法來訪問給定命名空間中的名稱,通過作用域解析運算子: :,使用命名空間來限定該名稱

jack :: pail = 12.34;

jill :: hill = mole;

jack :: fetch();

未被裝飾的名稱 稱為未限定的名稱

包含命名空間的名稱,被稱為限定的名稱

1  using宣告和using編譯指令

如果我們不希望每次使用時都對它進行限定,因此c++提供了兩種機制(using宣告和using編譯)來簡化對命名空間中名稱的使用。

using宣告使特定的識別符號可用

using編譯指令使整個命名空間可用

using宣告將特定的名稱新增到它所屬的宣告區域中。例如,main()中的using宣告jill::fetch將fetch新增到main()定義的宣告區域中。完成該宣告後,便可以使用fetch代替jill::fetch。using 編譯指令將特定的命名空間中的名稱新增到它所屬的宣告區域中

using宣告使乙個名稱可用,而using編譯指令使所有的名稱都可用。

using namespace jack; 使得命名空間jack中的所有名稱都可用。

using namespace std;   //使得std命名空間中的變數名在該函式中可用。

為了避免二義性,不允許同時使用兩個using宣告宣告兩個不同命名空間中的同名變數

using jack :: pal;

using jill :: pal;

2using編譯指令和using宣告之比較

命名空間旨在簡化大型程式設計專案的管理工作。

****************************************====

spring p命名空間 c命名空間

p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...

c 基礎,引用過載命名空間

命名空間解決全域性命名衝突的問題 標準c 庫中的所有元件都是在乙個被稱為std的名字空間中宣告和定義的。在 採用標準c 的平台上使用標準c 庫中的元件,只要寫乙個using指示符 using namespace std 就可以直接使用標準c 庫中的所有成員。或者 std 成員 的方式也可以使用c 庫...

C 基礎 什麼是命名空間

命名空間是類的邏輯分組,它組織成乙個層次結構 邏輯樹。這個樹的根是system。名字空間是為了防止名字汙染在標準c 中引入的。它可以將其中定義的名字隱藏起來,不同的名字空間中可以有相同的名字而互不干擾,使用時用域操作符 來引用。namespace 名字 在應用的時候 使用這些資料和函式名稱太麻煩 給...