命名空间

命名空间(英語:Namespace),也称命名空间名称空间等,它表示着一个标识符(identifier)的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他命名空间中。

例如,设Bill是X公司的员工,工号为123,而John是Y公司的员工,工号也是123。由于两人在不同的公司工作,可以使用相同的工号来标识而不会造成混乱,这里每个公司就表示一个独立的命名空间。如果两人在同一家公司工作,工号也相同,便会发生混乱。

这一特点是使用命名空间的主要理由。在大型的计算机程序文档中,往往会出现数百或数千个标识符。命名空间提供一隱藏區域標識符的機制。[1]通过将逻辑上相关的标识符组织成相应的命名空间,可使整个系统更加模块化

编程语言中,命名空间是对作用域的一种特殊的抽象,它包含了处于该作用域内的标识符,且本身也用一个标识符来表示,这样便将一系列在逻辑上相关的标识符用一个标识符组织了起来。许多现代编程语言都支持命名空间。在一些编程语言(例如C++Python)中,命名空间本身的标识符也属于一个外层的命名空间,也即命名空间可以嵌套,构成一个命名空间,树根则是无名的全局命名空间

函数的作用域可被視作隱式命名空间,它們和可見性、可訪問性和对象生命周期不可分割的联系在一起。

C++中的命名空间

C++语言中,命名空间是一种实体(entity),使用namespace来声明,并使用{ }来界定命名空间体(namespace body)。

namespace foo {
    int bar;
}

C语言全局作用域对应于C++全局命名空间作用域。全局命名空间不需要声明也无法显式声明。使用时,可以用前缀为::的qualified-id显式限定全局命名空间作用域中的名称。例如,::operator new指称全局new运算符函数。

命名空间可以在另一命名空间之中嵌套声明;但不能声明在类和代码块之中。在命名空间中声明的名称,默认具有外部链接属性(除非声明的是const对象,它默认是具有内部链接属性)。

按照是否有名字,可分为有名字的命名空间、不能显式定义的全局命名空间与匿名命名空间。后者的声明为:

namespace {
    // namespace-body(即声明序列(可选))
}

匿名命名空间中的名字具有文件作用域。这些名字在本编译单元中可以直接使用;也可以用前缀为::的qualified-id显式限定后使用。匿名命名空间中的名字具有内部链接属性。

命名空间的成员,是在命名空间体的花括号内声明了的名字。可以在命名空间体之外,给出命名空间成员的定义。即命名空间的成员声明与定义可以分开。命名空间内的名字,只能有一次定义,但可以多次声明。

嵌套的子命名空间必须定义在上层命名空间体之内。禁止把子命名空间的声明与定义分开。

不能以“命名空间名::成员名;”方式,在命名空间体之外为命名空间添加新成员。必须在命名空间体之中添加新成员的声明。

可以多次声明和定义同一命名空间,每次给这一命名空间添加新成员。同名的命名空间即便在声明位置不同,仍然是同一个实体。

可以在一个命名空间中引入其他命名空间的成员。例如:

namespace myNameSpace{
    using namespace His_NameSpace;
    using OLib::List;
    void my_func(String &, List &);
}

引用命名空间的成员,有下述办法:

  • 使用命名空间的作用域解析运算符::,如:std::cout
  • using namespace 命名空间名[::命名空间名…];这称为“using-Directive”。该语句使指定的命名空间中的目前已经声明的名字都提升到当前语句所在的作用域中可直接使用。如果引入的名字与该语句所在的声明区域的名字发生冲突,则编译器并不会发出任何警告信息,而只是用声明区域中的名字自动隐藏(hiding)命名空间中的同名成员,即使using namespace更靠后也是如此。
  • using 命名空间名::[命名空间名::……]成员名; 这称作“using-declaration”。用于向名字空间或者块作用域内引入其它名字空间的名字成员;也可用于把基类的非私有成员引入到派生类的定义中,如果引入的是基类的重载函数名字,则把基类的所有同名函数引入,如果派生类有同名同参数同限定的成员函数,则基类的函数被名字隐藏或覆盖。如果引入的名称与局部名称发生同名冲突,编译器会报错。

命名空间可以有别名:namespace 别名 = 命名空间名; 这使得名字较长的命名空间可以方便地用较短的别名来引用。


C++11起支持内联命名空间。使用inline namespace作为声明的起始。内联命名空间的名称在名称查找时被特别对待,使用qualified-id引用其中的名称时,被内联的命名空间名称可以省略。也即,内联命名空间内的标识符被提升到包含着内联的命名空间的那个父级的命名空间中。内联命名空间可以在修改命名空间名称的同时避免在二进制文件中生成的符号改变,因此不同内联命名空间的名称可以用于标识接口兼容的不同版本,有助于保持二进制兼容性。这也在标准库的实现中被使用,如libstdc++和libc++。

namespace Contoso
{
    namespace v_10
    {
        template <typename T>
        class Funcs
        {
        public:
            Funcs(void);
            T Add(T a, T b);
            T Subtract(T a, T b);
            T Multiply(T a, T b);
            T Divide(T a, T b);
        };
    }


    inline namespace v_20
    {
        template <typename T>
        class Funcs
        {
        public:
            Funcs(void);
            T Add(T a, T b);
            T Subtract(T a, T b);
            T Multiply(T a, T b);
            std::vector<double> Log(double);
            T Accumulate(std::vector<T> nums);
      };
    }
}

在XML中的应用

XML虽然不是一个独立的编程语言,但是它的出现使得命名空间的使用变得更为广泛。

在同一个命名空间裡,所有的元素名都必须唯一。

声明一个命名空间使用XML保留的属性xmlns,它的值必须是URI(统一资源标志符 Uniform Resource Identifier而非URL--Universal Resource Locator)指代.比如xmlns="http://www.w3.org/1999/xhtml".注意,事实上URI是不可读的,但它对XML解析器来说就只是简单不过的字串,如http://www.w3.org/1999/xhtml/页面存档备份,存于互联网档案馆) 这个地址本身并不包含任何代码,它只表示XHTML命名空间.使用URI (比如"http://www.w3.org/1999/xhtml")去标示一个命名空间,而不是用一个简短的字串 (比如"xhtml"),这样做是为了减少不同命名空间标示符冲突的可能性.

註釋

  1. ^ Adya, Atul; Bolosky, William; Castro, Miguel; Cermak, Gerald; Chaiken, Ronnie; Douceur, John; Howell, Jon; Lorch, Jacob; Theimer, Marvin; Wattenhofer, Roger. FARSITE: Federated, Available, and Reliable Storage for an Incompletely Trusted Environment (PDF). Proc. USENIX Symp. on Operating Systems Design and Implementation. 2002 [2021-02-11]. (原始内容 (PDF)存档于2010-07-28). The primary construct established by a file system is a hierarchical directory namespace, which is the logical repository for files. 

参见

外部链接

Read other articles:

British monthly magazine The SkinnyCategoriesMusic, arts, culture, listingsFrequencyMonthlyCirculation32,191 (ABC, 31 December 2014)[1]PublisherRadge Media C.I.C.[2]First issueMay 2005CountryScotlandWebsitetheskinny.co.uk The Skinny is a monthly free magazine distributed in venues throughout the cities of Dundee, Edinburgh and Glasgow in Scotland.[3] Founded in 2005, the magazine features interviews and articles on music, art, film, comedy and other aspects of culture ...

 

Mouhamadou Dabo Informasi pribadiTanggal lahir 28 November 1986 (umur 37)Tempat lahir Dakar, SenegalTinggi 1,76 m (5 ft 9+1⁄2 in)Posisi bermain BekInformasi klubKlub saat ini LyonNomor 14Karier junior1999–2001 Yeggo2001–2005 Saint-ÉtienneKarier senior*Tahun Tim Tampil (Gol)2005–2010 Saint-Étienne 115 (1)2010–2011 Sevilla 15 (0)2011– Lyon 7 (0)Tim nasional‡2003–2004 Senegal U-17 9 (2)2007–2008 Prancis U-21 17 (0) * Penampilan dan gol di klub senior ...

 

Election for the governorship of the U.S. state of South Dakota 1910 South Dakota gubernatorial election ← 1908 November 8, 1910 1912 →   Nominee Robert S. Vessey Chauncey L. Wood Party Republican Democratic Popular vote 61,744 37,983 Percentage 58.35% 35.90% County resultsVessey:      40–50%      50–60%      60–70%      70–80%     ...

INSStruktur yang tersediaPDBPencarian Ortolog: PDBe RCSB Daftar kode id PDB1A7F, 1AI0, 1AIY, 1B9E, 1BEN, 1EV3, 1EV6, 1EVR, 1FU2, 1FUB, 1G7A, 1G7B, 1GUJ, 1HIQ, 1HIS, 1HIT, 1HLS, 1HTV, 1HUI, 1IOG, 1IOH, 1J73, 1JCA, 1JCO, 1K3M, 1KMF, 1LKQ, 1LPH, 1MHI, 1MHJ, 1MSO, 1OS3, 1OS4, 1Q4V, 1QIY, 1QIZ, 1QJ0, 1RWE, 1SF1, 1T1K, 1T1P, 1T1Q, 1TRZ, 1TYL, 1TYM, 1UZ9, 1VKT, 1W8P, 1XDA, 1XGL, 1XW7, 1ZEG, 1ZEH, 1ZNJ, 2AIY, 2C8Q, 2C8R, 2CEU, 2H67, 2HH4, 2HHO, 2HIU, 2JMN, 2JUM, 2JUU, 2JUV, 2JV1, 2JZQ, 2K91, 2K9R, 2K...

 

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ou cette section d'article est rédigé entièrement ou presque entièrement à partir d'une seule source (août 2021). N'hésitez pas à modifier cet article pour améliorer sa vérifiabilité en apportant de nouvelles références dans des notes de bas de page. Makários IIIΜακάριος Γ Makários III à New York en 1962 Fonctions Président de la République de Chypre 7 décembre 1974 – 3 a...

 

Провинции Империи ХаньЗяоти и Кыутян(Первое китайское завоевание государства вьетов)交阯/交趾 и 九真 Цзяочжи и Цзючжэнь ←   → 111 до н.э. — 39 н. э. Столица Мелинь?, Льенлау?, Лонгбьен? Династия Хань  Медиафайлы на Викискладе История Вьетнама Доисторические времена от...

American golfer Stacy PrammanasudhPrammanasudh in 2008Personal informationNicknameStacy PBorn (1979-09-23) September 23, 1979 (age 44)Enid, Oklahoma, U.S.Height5 ft 6 in (1.68 m)Sporting nationality United StatesResidenceTulsa, Oklahoma, U.S.[1]CareerCollegeUniversity of TulsaTurned professional2002Current tour(s)LPGA Tour (2004–13)Former tour(s)Futures Tour (2002–03)Professional wins4Number of wins by tourLPGA Tour2Epson Tour2Best results in LPGA major ch...

 

Koordinat: 5°32′52″N 95°18′47″E / 5.547727°N 95.3130324°E / 5.547727; 95.3130324 Museum Tsunami Acehموسیوم سونامي اچيهFoto Museum Tsunami AcehDidirikan26 Desember 2009LokasiBanda Aceh, IndonesiaKoordinat5°32′52″N 95°18′47″E / 5.547727°N 95.3130324°E / 5.547727; 95.3130324JenisMuseumSitus webmuseumtsunami.id Museum Tsunami Aceh (Aksara Jawoë: موسيوم سونامي اچيه) adalah sebuah museum di Band...

 

Island located in a lake For the island in British Columbia, Canada, see Lake Island (British Columbia). For the island in Antarctica, see Lake Island (Antarctica). Martana island in Lake Bolsena, Italy A lake island is any landmass within a lake. It is a type of inland island. Lake islands may form a lake archipelago. Formation Lake islands may form in numerous ways. They may occur through a build-up of sedimentation as shoals, and become true islands through changes in the level of the lake...

إيزابيل أوبير (بالفرنسية: Isabelle Huppert)‏  معلومات شخصية اسم الولادة إيزابيل آن أوبير الميلاد 16 مارس 1953 (العمر 71 سنة)باريس، فرنسا مواطنة فرنسا  الطول 1.60 متر[1]  الزوج رونالد تشاما (1982-الآن) لديهما 3 أبناء الأولاد لوليتا شاماه عدد الأولاد 3   مناصب رئيس لجنة التحكيم في...

 

Theatre in Copenhagen, DenmarkDet Ny TeaterThe theatre seen from Gammel KongevejAddressGammel Kongevej 29Copenhagen VDenmarkCapacity1,000 (main)300 (Sceneriet)Current useTheatreConstructionOpened1908Closed1990–1994Years active104ArchitectLorenz GudmeWebsitehttp://www.detnyteater.dk/ Det Ny Teater (English: The New Theatre) is an established theatre in Copenhagen, Denmark, first opened in 1908. It is based in a building which spans a passage between Vesterbrogade and Gammel Kongevej in C...

 

Faroese physician and scientist Niels Ryberg FinsenBorn(1860-12-15)15 December 1860Tórshavn, Faroe IslandsDied24 September 1904(1904-09-24) (aged 43)Copenhagen, DenmarkCitizenshipDanishAlma materUniversity of CopenhagenKnown forPhototherapyAwardsNobel Prize in Physiology or Medicine (1903) Cameron Prize for Therapeutics of the University of Edinburgh (1904) Niels Ryberg Finsen (15 December 1860 – 24 September 1904) was Faroese physician and scientist. In 1903, he was awarded...

Set of three coordinated amino acids The enzyme TEV protease[a] contains an example of a catalytic triad of residues (red) in its active site. The triad consists of an aspartate (acid), histidine (base) and cysteine (nucleophile). The substrate (black) is bound by the binding site to orient it next to the triad. (PDB: 1LVM​) A catalytic triad is a set of three coordinated amino acids that can be found in the active site of some enzymes.[1][2] Catalytic triads are...

 

Artikel ini perlu diwikifikasi agar memenuhi standar kualitas Wikipedia. Anda dapat memberikan bantuan berupa penambahan pranala dalam, atau dengan merapikan tata letak dari artikel ini. Untuk keterangan lebih lanjut, klik [tampil] di bagian kanan. Mengganti markah HTML dengan markah wiki bila dimungkinkan. Tambahkan pranala wiki. Bila dirasa perlu, buatlah pautan ke artikel wiki lainnya dengan cara menambahkan [[ dan ]] pada kata yang bersangkutan (lihat WP:LINK untuk keterangan lebih lanjut...

 

Tadworth WindmillThe mill c.1910, with the roundhouse of the other mill in the foregroundOriginMill nameNew MillGrid referenceTQ 236 555Coordinates51°17′06″N 0°13′44″W / 51.285°N 0.229°W / 51.285; -0.229Operator(s)PrivateYear builtc1762InformationPurposeCorn millTypePost millRoundhouse storeysTwo storeysNo. of sailsFour sailsType of sailsSpring Patent sailsWindshaftCast ironWindingTailpoleNo. of pairs of millstonesTwo pairsOther informationTallest survivin...

此條目没有列出任何参考或来源。 (2018年10月23日)維基百科所有的內容都應該可供查證。请协助補充可靠来源以改善这篇条目。无法查证的內容可能會因為異議提出而被移除。 志公會(日语:志公会/しこうかい Shikōkai */?),普遍稱麻生派,是日本自由民主黨内派系之一,因為政治取向偏於保守,被日本政治科學家定性為「保守本流」派系。會長為前首相麻生太郎�...

 

American politician Christine CanavanMember of the Massachusetts House of Representativesfrom the 10th Plymouth districtIn office1993 – January 7, 2015Preceded byJohn F. CruzSucceeded byMichelle DuBois Personal detailsBorn (1950-01-25) January 25, 1950 (age 74)Dorchester, MassachusettsNationalityAmericanPolitical partyDemocraticSpousePaulChildren2ResidenceBrockton, MassachusettsAlma materMassasoit Community College, University of Massachusetts BostonWebsitechristin...

 

Kanariezaad Bloeiwijze kanariezaad Taxonomische indeling Rijk:Plantae (Planten)Stam:Embryophyta (Landplanten)Klasse:Spermatopsida (Zaadplanten)Clade:BedektzadigenClade:EenzaadlobbigenClade:CommelinidenOrde:PoalesFamilie:Poaceae (Grassenfamilie)Onderfamilie:PooideaeGeslachtengroep:AveneaeGeslacht:Phalaris (Kanariegras) Soort Phalaris canariensisL. (1753) Afbeeldingen op Wikimedia Commons Kanariezaad op Wikispecies Portaal    Biologie Kanariezaad (Phalaris canariensis) is een eenjari...

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Certaines informations figurant dans cet article ou cette section devraient être mieux reliées aux sources mentionnées dans les sections « Bibliographie », « Sources » ou « Liens externes » (juillet 2009). Vous pouvez améliorer la vérifiabilité en associant ces informations à des références à l'aide d'appels de notes. Combat des îles Cocos Informations générales Da...

 

ユーロビジョン・ソング・コンテスト 2023United by Music 日程 準決勝1 2023年5月9日 準決勝2 2023年5月11日 決勝 2023年5月13日 主催者 会場 イギリス リバプールリヴァプール・アリーナ 司会 アリーシャ・ディックソン(英語版)ハンナ・ウォッディンガム(英語版)ユリア・サニナ(英語版)グレアム・ノートン(英語版) 総監督 Martin Österdahl 主催放送局 英国放送協会 参加�...