C/C++中命名空間(namespace)詳解及其作用介紹
概述
命名空間 (namespace) 可以幫助我們區(qū)分不同庫中相同名稱的函數, 類, 變量等. 使用了命名空間即定義了上下文. 命名空間就是定義了一個范圍.
命名空間
為了解決 C++ 標準庫中的標識符與程序中的全局標識符之間以及不同庫中的所有標識符之間的命名沖突. 標準 C++ 庫的所有標識符都定義在一個名為 std 的命名空間中. 在程序中用到 C++ 標準庫時, 使用 std 作為限定.
我們在寫 “Hello World” 的時候就曾用到過命名空間 (namespace):
命名空間的作用
命名空間是 ANSI C++ 引入可以由用戶命名的作用域, 用來處理程序中常見的同名沖突. 在 C++ 程序中, 有大量的變量, 函數和類名. 如果他們都存在于同一個全局命名空間中, 會導致很多沖突.
- 自定義函數與標準庫函數重名
- 程序中使用的名字與第三方庫中名稱相同
- 同一項目不同模塊中名字的沖突
命名空間的機制, 對于聲明于其中的名稱都進行了本地化:
- 相同的名稱可以在不同的上下文中使用, 而不會引起名稱的沖突
- C++ 中的標準庫被定義到 std 命名空間中, 減少了與用戶自定義名稱的沖突
- 在自己的程序中創(chuàng)建自己的命名空間, 避免本地化名稱與外界沖突
自定義命名空間
我們可以自己定義命名空間. 我們把一些全局分別放在各個名字空間, 從而與其他全局實體分隔開來.
格式:
namespace 命名空間名 { 聲明; }
- 變量 (可以帶有初始化) 及常量
- 函數 (可以是定義或聲明)
- 結構體
- 類
- 模板
- 命名空間 (在一個命名空間中又定義一個命名空間, 即嵌套的命名空間)
命名空間的作用是建立一些互相分隔的作用域. 把一些全局實體分隔開來, 以免產生名字沖突.
命名空間成員的方法
一般方法: 引用命名空間成員時, 用命名空間名對名命名空間成員進行限定, 以區(qū)別同名標識符. (命名空間::命名空間成員名)
簡化使用命名空間成員的機制:
- 使用命名空間別名: 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; }
到此這篇關于C/C++中命名空間(namespace)詳解及其作用介紹的文章就介紹到這了,更多相關C++命名空間內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!