C++命名空間namespace的理解

2021-03-02 工控上位機學習

C語言定義了3個層次的作用域:文件、函數和複合語句。

C++ 引入了類的作用域,類是在文件內的。

在不同的作用域中,可以定義相同名字的變量,互不幹擾,編譯器能夠區別它們。

1、命名空間的概念

C語言中,只有一個全局作用域,所有全局標識符共享一個作用域,因此絕對不能重名。

但隨著系統越來越複雜,通常不會僅由一個人來開發,不同的人開發同一個系統,不可避免地會出現變量或函數的命名衝突,當將所有人的代碼結合到一起時,就會因為變量或函數重名,導致編譯失敗。

因此,C++提出了命名空間的概念:

命名空間將全局作用域分成不同的部分;

不同命名空間的標識符可以同名,不會發生衝突;

命名空間可以嵌套。

namespace Name1
{
namespace Name2
{
/*...*/
}
/*...*/
}

全局作用域也叫默認命名空間。

2、舉例說明

比如現在有一個小學,學校裡有六個年級,每個年級有三個班級。

現在一位老人來這個學校找到校長,要找一位叫張三的學生,感謝他在公共汽車上給自己讓座。

現在校長(編譯器)要找張三,但學校裡有很多叫張三的人,怎麼確定是哪個張三呢?

這時如果知道張三是哪個年紀,哪個班級,那麼很快就能確定是誰。

假設是三年級二班的張三,那麼這個三年級二班就是命名空間。

namespace grade
{
namespace class
{
student zhang_san;
}
}

C++的命名空間,就是一種為了避免命名衝突的機制。

3、使用方式

C++的命名空間,有兩種使用方式:

// 導入整個std命名空間到當前作用域
using namespace std;

// 只導入cout到當前作用域
using std::cout;

來源:算法集市(頭條)

原鏈:https://www.toutiao.com/a6845627757724959243/

轉發是最大的鼓勵!謝謝您的支持!

重要通知

想加入工控上位機學習技術交流群

請添加班長為好友

並備註:地區-行業-姓名暱稱獲取進群資格。

分享到朋友圈,和朋友們一起分享吧

——————————————————————

▣ 來源:網絡-百度文庫,侵刪!

▣ 聲明:本文素材系網絡收集,工控上位機學習編輯整理。文中所用視頻、圖片、文字版權歸原作者所有。但因轉載眾多,無法確認真正原始作者,故僅標明轉載來源。如涉及作品版權問題,煩請及時聯繫17621634088(微信同號),我們將即刻確認版權並按國家相關規定支付稿酬!

相關焦點

  • php命名空間namespace詳解
    PHP的命名空間(namespace)是PHP 5.3中加入最重要的一個新特性一.
  • c++之內存分配、命名空間、強制類型轉換學習總結
    + 中的命名空間:在c語言中只有一個全局作用域:c語言中所有的全局標識符共享同一個作用域。-c++中提出了命名空間的概念:命名空間將全局作用域分成不同的部分。不同命名空間中的標識符可以同名而且不會發生衝突。
  • C++系列2-1:C++快速入門之命名空間和輸入輸出
    舉個例子:要想理解,而不是以一種模板的方式看待C++輸出Hello World的這樣一段簡單程序,就需要很多概念#include <instream>using namespace std;int main(){ cout<<"Hello World!"
  • C++標準庫和std命名空間
    早期的 C++ 還不完善,不支持命名空間,沒有自己的編譯器,而是將C++代碼翻譯成C代碼,再通過C編譯器編譯成目標代碼。這個時候的C++仍然在使用C語言庫,此外還開發了一些新的庫,增加了不少頭文件,例如:iostream.h:輸入輸出頭文件。fstream.h:文件操作頭文件。wchar.h:寬字符處理頭文件。
  • c++簡介及順序結構
    c++介紹C++ 是一種靜態類型的、編譯式的、通用的、大小寫敏感的、不規則的程式語言,支持過程化編程、面向對象編程和泛型編程。C++ 被認為是一種中級語言,它綜合了高級語言和低級語言的特點。介紹Dev-C++是一個Windows環境下的一個適合於初學者使用的輕量級 C/C++ 集成開發環境(IDE),實現對c++程序的編輯、編譯、運行和調試等工作。2.2. 調整編輯器
  • 學習c++筆記——標準輸出流cout
    c++語言標準輸出流cout是啥?」。我答:「就是在列印設備或顯示設備上輸出息信」 。女粉絲問:「陳老師,可以教我嗎。」。我答:「好的~!」,下面我就教大家c++語言中cout的用法,c++語言1是一個很cout輸出案例,下面我們就一步一步講解下這個套代碼。
  • 《和孩子一起學C++》cout語句的使用
    #include <iostream>using namespace std;int main() {return 0;}一個C++程序由頭文件、命名空間和主函數構成。頭文件類似於這種形式:#include <iostream>,是C++對其他程序的引用,這樣就可以在我們的程序中調用引用程序中的功能(函數)。
  • C++基礎總結(一):從「hello world」入門C++!
    C++ 進一步擴充和完善了 C 語言,最初命名為帶類的C,後來在 1983 年更名為 C++。C++ 是 C 的一個超集,事實上,任何合法的 C 程序都是合法的 C++ 程序。注意:使用靜態類型的程式語言是在編譯時執行類型檢查,而不是在運行時執行類型檢查。
  • C++之標準庫的學習總結
    >    代碼示例:#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>using namespa
  • 【基礎】PHP為什麼要使用命名空間
    聲明了命名空間之後,下面的const, function, class都會劃歸到該命名空間。2. 只有聲明過命名空間的PHP 文件才能加載有命名空間的PHP文件。3.PHP 5.3 及以上才能使用命名空間 名詞:    關鍵字:namespace 用來聲明 本PHP文件的命名空間    常量:__NAMESPACE__ 用來返回當前命名空間的名稱 默認為空字符串    操作符: use 默認以最後一個\後的字符串為別名,配合 as 則為 as後的字符串,與MySQL
  • php的自動加載和命名空間
    命名空間命名空間是為了解決命名衝突的問題。使用命名空間只是讓類名有了前綴,不容易發生衝突,系統仍然不會進行自動導入。spl_autoload一旦調用 spl_autoload_register() 函數,當調用未定義類時,系統就會按順序調用註冊到 spl_autoload_register() 函數的所有函數,而不是自動調用 __autoload() 函數。
  • C++ 的幾個for 循環,範圍for語句
    例子:#include <iostream>using namespace std;int main(){ string str("this is a c++"); //每行輸出str中的一個字符 for(
  • C++中inline, extern, static潛在的陷阱
    ;int const foo::len = 1024;3.3 命名空間(namespace)中使用static名稱空間範圍靜態用於定義只在一個源文件中可見的全局變量(函數)。也就是說,靜態變量沒有連結。
  • Linux namespace之:pid namespace
    理解pid namespacePID namespace表示隔離一個具有獨立PID的運行環境。在每一個pid namespace中,進程的pid都從1開始,且和其他pid namespace中的PID互不影響。這意味著,不同pid namespace中可以有相同的PID值。
  • C++逆向學習(二) vector
    首先配置一塊新空間,然後將元素從舊空間一一搬往新空間,再把舊空間歸還給作業系統內存增長機制測試代碼:#include<iostream>#include<vector>using namespace std;int main(int argc, char** argv) { std::
  • C++ 優先隊列priority_queue
    實現排序#include <iostream>#include <queue>using namespace std;void common_sort(){ int source_data[10] = {3, 5, 8, 1, 10, 2, 9, 15, 13, 16};
  • Linux namespace 系列:初識 namespace
    Linux namespace 是 Linux 提供的一種內核級別環境隔離的方法。Linux namespace 將全局系統資源封裝在一個抽象中,從而使 namespace 內的進程認為自己具有獨立的資源實例。
  • 小白入門:初識C++
    代碼如下:#include<iostream>#include<cstdlib>usingnamespacestd;intmain(){inti=10;while(i){cout<<i;--i;}system("pause");return0;}運行結果:10 9 8 7 6 5 4 3 2 1小貼士:由於在main函數前添加了
  • C++之字符串類學習總結
    答案是c++中並沒有提供原生的字符串類型。string直接支持字符串查找和提取string直接支持字符串的插入和替換代碼示例:#include <iostream>#include <string>using namespace
  • 新手入門:關於C++中的內聯函數(inline)
    >   在c++中,為了解決一些頻繁調用的小函數大量消耗棧空間或者是叫棧內存的問題,特別的引入了inline修飾符,表示為內聯函數。  可能說到這裡,很多人還不明白什麼是棧空間,其實棧空間就是指放置程序的局部數據也就是函數內數據的內存空間,在系統下,棧空間是有限的,如果頻繁大量的使用就會造成因棧空間不足所造成的程序出錯的問題,函數的死循環遞歸調用的最終結果就是導致棧內存空間枯竭。