C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员
1. 3種方法
- using 聲明
- 命名空間的別名( namespace alias)
- using 指示( using directive)
1.1 命名空間的別名
namespace cplusplus_primer { /* ... / ;} namespace primer = cplusplus_primer;命名空間的別名也可以指向一個嵌套的命名空間:
namespace Qlib = primer::QueryLib; Qlib::Query q;一個命名空間可以有好幾個同義詞或別名, 所有別名都與命名空間原來的名字等價
1.2 using 聲明( using declaration)
一條 using 聲明( using declaration) 語句一次只引入命名空間的一個成員
using 聲明的名字的作用域與 using 聲明語句本身的作用域一致
eg.
using nsl::Student; //在用上面的using聲明后,在其后程序中出現的Student就是隱含地指nsl::Student1.2.1 作用域
有效范圍從using聲明的地方開始,一直到using聲明所在的作用域結束為止
未加限定的名字只能在using聲明所在的作用域以及內層作用域中使用
一條using聲明可以出現在全局作用域、局部作用域、命名空間作用域以及類的作用域中;在類的作用域中,這樣的聲明語句只能指向基類成員(因為派生類只能為那些它可以訪問的名字提供using聲明)
當命名空間被注入到它的外層作用域之后,很有可能該命名空間中定義的名字會與其外層作用域中的成員沖突。這種沖突是允許存在的,但是要想使用沖突的名字,我們就必須明確指出名字的版本
namespace blip {int bi = 16, bj = 15, bk = 23;// other declarationsint bj = 0; // ok: bj inside blip is hidden inside a namespacevoid manip(){// using directive - names in blip "added" to global scopeusing namespace blip;// clash between ::bj and blip::bj// detected only if bj is used++bi; // sets blip::bi to 17++bj; // error: ambiguous// global bj or blip::bj?++::bj; // ok: sets global bj to 1++blip::bj; // ok: sets blip::bj to 16int bk = 97; // local bk hides blip::bk++bk; // sets local bk to 98} }1.2.2. 頭文件與 using 聲明或指示
頭文件如果在其頂層作用域中含有 using 指示或 using 聲明, 則會將名字注入到所有包含了該頭文件的文件中。
通常情況下, 頭文件應該只負責定義接口部分的名字, 而不定義實現部分的名字。 因此, 頭文件最多只能在它的函數或命名空間內使用 using 指示或 using 聲明
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha