C/C++中命名空間(namespace)詳解及其作用介紹
概述
命名空間 (namespace) 可以幫助我們區(qū)分不同庫(kù)中相同名稱的函數(shù), 類, 變量等. 使用了命名空間即定義了上下文. 命名空間就是定義了一個(gè)范圍.

命名空間
為了解決 C++ 標(biāo)準(zhǔn)庫(kù)中的標(biāo)識(shí)符與程序中的全局標(biāo)識(shí)符之間以及不同庫(kù)中的所有標(biāo)識(shí)符之間的命名沖突. 標(biāo)準(zhǔn) C++ 庫(kù)的所有標(biāo)識(shí)符都定義在一個(gè)名為 std 的命名空間中. 在程序中用到 C++ 標(biāo)準(zhǔn)庫(kù)時(shí), 使用 std 作為限定.
我們?cè)趯?“Hello World” 的時(shí)候就曾用到過(guò)命名空間 (namespace):

命名空間的作用
命名空間是 ANSI C++ 引入可以由用戶命名的作用域, 用來(lái)處理程序中常見(jiàn)的同名沖突. 在 C++ 程序中, 有大量的變量, 函數(shù)和類名. 如果他們都存在于同一個(gè)全局命名空間中, 會(huì)導(dǎo)致很多沖突.
- 自定義函數(shù)與標(biāo)準(zhǔn)庫(kù)函數(shù)重名
- 程序中使用的名字與第三方庫(kù)中名稱相同
- 同一項(xiàng)目不同模塊中名字的沖突
命名空間的機(jī)制, 對(duì)于聲明于其中的名稱都進(jìn)行了本地化:
- 相同的名稱可以在不同的上下文中使用, 而不會(huì)引起名稱的沖突
- C++ 中的標(biāo)準(zhǔn)庫(kù)被定義到 std 命名空間中, 減少了與用戶自定義名稱的沖突
- 在自己的程序中創(chuàng)建自己的命名空間, 避免本地化名稱與外界沖突

自定義命名空間
我們可以自己定義命名空間. 我們把一些全局分別放在各個(gè)名字空間, 從而與其他全局實(shí)體分隔開(kāi)來(lái).
格式:
namespace 命名空間名 {
聲明;
}
- 變量 (可以帶有初始化) 及常量
- 函數(shù) (可以是定義或聲明)
- 結(jié)構(gòu)體
- 類
- 模板
- 命名空間 (在一個(gè)命名空間中又定義一個(gè)命名空間, 即嵌套的命名空間)
命名空間的作用是建立一些互相分隔的作用域. 把一些全局實(shí)體分隔開(kāi)來(lái), 以免產(chǎn)生名字沖突.
命名空間成員的方法
一般方法: 引用命名空間成員時(shí), 用命名空間名對(duì)名命名空間成員進(jìn)行限定, 以區(qū)別同名標(biāo)識(shí)符. (命名空間::命名空間成員名)
簡(jiǎn)化使用命名空間成員的機(jī)制:
- 使用命名空間別名: namespace TV = Television; // TV等同Television
- 使用格式: using 命名空間成員名 using ns1::Student; // Student等同ns1::Student
- 使用: using namespace 命名空間名
案例
h1.h:
#ifndef PROJECT8_H1_H
#define PROJECT8_H1_H
namespace kitchen {
class Table {
private:
int legs;
int price;
public:
Table(int l, int p){
legs = l;
price = p;
}
};
}
#endif //PROJECT8_H1_H
h2.h:
#ifndef PROJECT8_H2_H
#define PROJECT8_H2_H
namespace office {
class Table {
private:
int rows;
int cols;
public:
Table(int r, int c){
rows = r;
cols = c;
}
};
}
#endif //PROJECT8_H2_H
mian.cpp:
#include <iostream>
#include "h1.h"
#include "h2.h"
using namespace std;
int main() {
kitchen::Table t1(6, 300);
office::Table t2(6, 2);
return 0;
}
到此這篇關(guān)于C/C++中命名空間(namespace)詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++命名空間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++調(diào)用Python基礎(chǔ)功能實(shí)例詳解
c++調(diào)用Python首先安裝Python,本文以win7為例,給大家詳細(xì)介紹C++調(diào)用Python基礎(chǔ)功能,需要的朋友參考下吧2017-04-04
C++中指向?qū)ο蟮某V羔樑c指向常對(duì)象的指針詳解
如果一個(gè)變量已經(jīng)被聲明成常變量,則只能用指向常變量的指針變量指向它,而不能用一般的(非const型的)指針變量指向它2013-10-10
利用C語(yǔ)言實(shí)現(xiàn)http服務(wù)器(Linux)
本文將利用C語(yǔ)言實(shí)現(xiàn)一個(gè)輕量級(jí)的http服務(wù)器,使用Reactor模式,即主線程只負(fù)責(zé)監(jiān)聽(tīng)文件描述符上是否有事件發(fā)生,有的話立即將該事件通知工作線程,感興趣的可以了解一下2022-07-07
如何在C語(yǔ)言中提取Shellcode并執(zhí)行
Shellcode是一種獨(dú)立于應(yīng)用程序的機(jī)器代碼,通常用于實(shí)現(xiàn)特定任務(wù),如執(zhí)行遠(yuǎn)程命令、注入惡意軟件或利用系統(tǒng)漏洞,本文將深入探討如何在C語(yǔ)言中提取Shellcode,并通過(guò)XOR加密技術(shù)增加其混淆程度,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2023-12-12
wince程序防止創(chuàng)建多個(gè)實(shí)例實(shí)現(xiàn)互斥作用
什么時(shí)候用的互斥?當(dāng)你的程序只允許同時(shí)打開(kāi)一個(gè)的時(shí)候,就可以通過(guò)互斥來(lái)實(shí)現(xiàn),下面說(shuō)的互斥,主要是針對(duì)防止程序創(chuàng)建多個(gè)實(shí)例這種情況來(lái)實(shí)現(xiàn)的2014-02-02
C++實(shí)現(xiàn)LeetCode(32.最長(zhǎng)有效括號(hào))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(32.最長(zhǎng)有效括號(hào)),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

