【C++】C++中的命名/名字/名稱空間 namespace

C++中的命名/名字/名稱空間 namespace

  • 1、問題引入
  • 2、概念
  • 3、作用
  • 4、格式
  • 5、使用命名空間中的成員
    • 5.1 using編譯指令( 引進整個命名空間) ---將這個盒子全部打開
    • 5.2 using聲明使特定的標識符可用(引進命名空間的某個成員) ---將這個盒子中某個成員的位置打開
    • 5.3 調用的時候指定是哪一個命名空間下的成員
  • 6、示例代碼
  • 7、命名空間的嵌套
  • 8、同名命名空間
  • 9、匿名命名空間
  • 10、全局作用域

1、問題引入

\quad 探討:在實際的系統開發中,所有的開發工作,通常都不會僅由一個人來開發完成,不同的人只負責自己功能模塊,他們在設計時,比如聲明變量,通常情況下,不會考慮其他人是否已使用該變量名,在模塊功能測試時,相互之間是獨立的,完全沒有問題,當系統功能合成 時,不可避免地會出現變量或函數的命名沖突,因為變量或函數重名而導致的問題將會造成一定的混亂。所以如何在同一個.cpp文件中定義相同變量名的兩個全局變量呢

#include<iostream>int val = 200;
int val = 300;int main()
{return 0;
}

現象:編譯會報錯
解決方法:使用命名空間區分這兩個全局變量

2、概念

其實命名空間就是類似一個黑盒子

3、作用

防止名字沖突

4、格式

namespace 命名空間名字
{//聲明定義變量//聲明定義函數//定義結構體/共用體/枚舉 數據類型//聲明類  定義對象
}

5、使用命名空間中的成員

5.1 using編譯指令( 引進整個命名空間) —將這個盒子全部打開

 using namespace 命名空間名字;

5.2 using聲明使特定的標識符可用(引進命名空間的某個成員) —將這個盒子中某個成員的位置打開

using 命名空間名字::成員名;

5.3 調用的時候指定是哪一個命名空間下的成員

cout<<命名空間名字::成員名

6、示例代碼

#include<iostream>using namespace std;//使用名稱空間LcdSpace  
namespace LcdSpace{int x = 10;int y = 20;typedef struct{int data;}Data_t;enum {LCD_COLOR_RED,LCD_COLOR_GREEN};int lcd_init(){return 0;}}; 
//使用名稱空間TouchSpace
namespace TouchSpace{int x = 100;int y = 200;
};//外部的全局變量   
//int x = 1000;
//int y = 2000;//2)使用using聲明的方式去引入名字空間中的某個成員
//把這個TouchSpace黑盒子 打開一個角落,正好把某個成員放出來
//格式:using 命名空間名字::成員名;
//using  TouchSpace::x;void test01()
{using namespace LcdSpace;cout<<"x:"<<x<<" y:"<<y<<endl;
}int main()
{//3)使用using編譯指令的方式 打開整個名字空間 using namespace TouchSpace;//如何使用名字空間里面的成員//1)使用 作用域限定符:: 去指定//格式:  名字空間的名字::成員變量名std::cout<<TouchSpace::x<<" "<<TouchSpace::y<<std::endl;std::cout<<x<<" "<<y<<std::endl;std::cout<<LcdSpace::x<<" "<<LcdSpace::y<<std::endl;LcdSpace::Data_t data;LcdSpace::lcd_init();//我們有時候為了強調該變量的全局特性,可以在前面加上::修飾cout<<x<<" "<<y<<endl;test01();return 0;
}

7、命名空間的嵌套

namespace myspace{int x=10;int y=20;namespace spaceA{int a=100;void setValue(int data){a = data;}void printValue(){std::cout<<"a:"<<a<<std::endl;}}
}
使用:
myspace::spaceA::printValue();

8、同名命名空間

\quad 命名空間可以分開定義,也就是說,你在定義一個命名空間之后,如果后面想要在這個命名空間里面再次添加某些數據成員或者函數成員,可以再次接著定義。

namespace myspace{int x=10;int y=20;
}
namespace myspace{int a=100;int b=200;void print(){std::cout<<"x:"<<x<<" y:"<<y<<std::endl;}
}

9、匿名命名空間

namespace {int data=123;
}

可以在本文件中直接使用data, 限制空間中的成員只能在本文件中使用,類似c語言中的static修飾

10、全局作用域

\quad 全局作用域是從C語言就開始有的一種作用域,在C++中,有時為了強調某符號的全局特性,或為了避免與導入的名字空間中的重名符號沖突,會在使用全局符號的時候加上 作用域解析符

int global = 100;
int main()
{int global = 200;// 重名的標識符,外層的作用域會被內層的掩蓋cout <<   global << endl; // 輸出200// 使用雙冒號引用全局作用域中的標識符cout << ::global << endl; // 輸出100
}
  • 全局作用域的名字空間是匿名的,引用全局作用域符號只需加 :: 即可。
  • 名字空間的本質就是作用域,遵守C語言關于作用域的基本原則,如內層作用域重名符號會掩蓋外層作用域的重名符號。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79699.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79699.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79699.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Arduino IDE中離線更新esp32 3.2.0版本的辦法

在Arduino IDE中更新esp32-3.2.0版本是個不可能的任務&#xff0c;下載文件速度極慢。網上提供了離線的辦法&#xff0c;提供了安裝文件&#xff0c;但是沒有3.2.0的版本。 下面提供了一種離線安裝方法 一、騰訊元寶查詢解決辦法 通過打開開發板管理地址&#xff1a;通過在騰…

【工具使用-數據可視化工具】Apache Superset

1. 工具介紹 1.1. 簡介 一個輕量級、高性能的數據可視化工具 官網&#xff1a;https://superset.apache.org/GitHub鏈接&#xff1a;https://github.com/apache/superset官方文檔&#xff1a;https://superset.apache.ac.cn/docs/intro/ 1.2. 核心功能 豐富的可視化庫&…

算法每日一題 | 入門-順序結構-三角形面積

三角形面積 題目描述 一個三角形的三邊長分別是 a、b、c&#xff0c;那么它的面積為 p ( p ? a ) ( p ? b ) ( p ? c ) \sqrt{p(p-a)(p-b)(p-c)} p(p?a)(p?b)(p?c) ?&#xff0c;其中 p 1 2 ( a b c ) p\frac{1}{2}(abc) p21?(abc) 。輸入這三個數字&#xff0c;…

MongoDB入門詳解

文章目錄 MongoDB下載和安裝1.MongoDBCompass字段簡介1.1 Aggregations&#xff08;聚合&#xff09;1.2 Schema&#xff08;模式分析&#xff09;1.3 Indexes&#xff08;索引&#xff09;1.4 Validation&#xff08;數據驗證&#xff09; 2.增刪改查操作2.1創建、刪除數據庫&…

從Oculus到Meta:Facebook實現元宇宙的硬件策略

Oculus的起步 Facebook在2014年收購了Oculus&#xff0c;這標志著其在虛擬現實&#xff08;VR&#xff09;領域的首次重大投資。Oculus Rift作為公司的旗艦產品&#xff0c;是一款高端的VR頭戴設備&#xff0c;它為用戶帶來了沉浸式的體驗。Facebook通過Oculus Rift&#xff0…

安裝與配置Go語言開發環境 -《Go語言實戰指南》

為了開始使用Go語言進行開發&#xff0c;我們首先需要正確安裝并配置Go語言環境。Go的安裝相對簡單&#xff0c;支持多平臺&#xff0c;包括Windows、macOS和Linux。本節將逐一介紹各平臺的安裝流程及環境變量配置方式。 一、Windows系統 1. 下載Go安裝包 前往Go語言官網&…

網絡的搭建

1、rpm rpm -ivh 2、yum倉庫&#xff08;rpm包&#xff09;&#xff1a;網絡源 ----》網站 本地源 ----》/dev/sr0 光盤映像文件 3、源碼安裝 源碼安裝&#xff08;編譯&#xff09; 1、獲取源碼 2、檢測環境生成Ma…

多元隨機變量協方差矩陣

主要記錄多元隨機變量數字特征相關內容。 關鍵詞&#xff1a;多元統計分析 一元隨機變量 總體 隨機變量Y 總體均值 μ E ( Y ) ∫ y f ( y ) d y \mu E(Y) \int y f(y) \, dy μE(Y)∫yf(y)dy 總體方差 σ 2 V a r ( Y ) E ( Y ? μ ) 2 \sigma^2 Var(Y) E(Y - \…

Ros工作空間

工作空間其實放到嵌入式里就是相關的編程包 ------------------------------------- d第一個Init 就是類型的初始化 然后正常一個catkin_make 后 就會產生如devil之類的文件&#xff0c; 你需要再自己 終端 一個catkin_make install 一下 。這樣對應install也會產生&#xf…

qt國際化翻譯功能用法

文章目錄 [toc]1 概述2 設置待翻譯文本3 生成ts翻譯源文件4 編輯ts翻譯源文件5 生成qm翻譯二進制文件6 加載qm翻譯文件進行翻譯 更多精彩內容&#x1f449;內容導航 &#x1f448;&#x1f449;Qt開發經驗 &#x1f448; 1 概述 在 Qt 中&#xff0c;ts 文件和 qm 文件是用于國…

PyTorch 與 TensorFlow 中基于自定義層的 DNN 實現對比

深度學習雙雄對決&#xff1a;PyTorch vs TensorFlow 自定義層大比拼 目錄 深度學習雙雄對決&#xff1a;PyTorch vs TensorFlow 自定義層大比拼一、TensorFlow 實現 DNN1. 核心邏輯 二、PyTorch 實現自定義層1. 核心邏輯 三、關鍵差異對比四、總結 一、TensorFlow 實現 DNN 1…

1ms城市算網穩步啟航,引領數字領域的“1小時經濟圈”效應

文 | 智能相對論 作者 | 陳選濱 為什么近年來國產動畫、國產3A大作迎來了井噴式爆發&#xff1f;拋開制作水平以及市場需求的升級不談&#xff0c;還有一個重要原因往往被大多數人所忽視&#xff0c;那就是新型信息的完善與成熟。 譬如&#xff0c;現階段驚艷用戶的云游戲以及…

【計算機視覺】語義分割:Segment Anything (SAM):通用圖像分割的范式革命

Segment Anything&#xff1a;通用圖像分割的范式革命 技術突破與架構創新核心設計理念關鍵技術組件 環境配置與快速開始硬件要求安裝步驟基礎使用示例 深度功能解析1. 多模態提示融合2. 全圖分割生成3. 高分辨率處理 模型微調與定制1. 自定義數據集準備2. 微調訓練配置 常見問…

機器學習例題——預測facebook簽到位置(K近鄰算法)和葡萄酒質量預測(線性回歸)

一、預測facebook簽到位置 代碼展示&#xff1a; import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import…

對ubuntu的簡單介紹

目錄 1. 簡介 2. 核心特點 3. 系統架構與技術亮點 4. 適用場景 5. 優缺點分析 6. 安裝與配置建議 7. 未來發展方向 總結 1. 簡介 Ubuntu 是基于 Debian 的開源 Linux 操作系統&#xff0c;由 Canonical 公司&#xff08;創始人 Mark Shuttleworth&#xff09;提供商業支…

多商戶電商系統整套源碼開源,支持二次開發,構建多店鋪高效聯動運營方案

在數字化浪潮席卷全球的今天&#xff0c;電商行業競爭愈發激烈&#xff0c;多商戶電商平臺憑借其獨特的生態優勢&#xff0c;成為眾多企業和創業者的熱門選擇。一套優質的多商戶電商系統不僅能為商家提供穩定的銷售渠道&#xff0c;還能為平臺運營者創造巨大的商業價值。分享一…

Qwen3與Deepseek R1對比(截止20250506)

Qwen3和DeepSeek R1都是在AI領域內備受關注的大規模語言模型。根據最近的評測和報道&#xff0c;以下是Qwen3與DeepSeek R1的一些對比要點&#xff1a; 全面性能&#xff1a; Qwen3被描述為在數學、推理、代碼等核心能力上全面超越了DeepSeek R1。特別是在編程能力方面&#x…

Linux56 YUM源配置

epel未啟動 顯示系統未通過注冊 配置YUM倉庫 本地YUM倉庫 1.備份 tar -zcf repo.tar.gz *.repo 2.掛載 mount -o ro /dev/sr0 /mnt 3.開機自啟 chmod x /etc/rc.local echo ‘mount -o ro /dec/sr0 /mnt’ /etc/rc.local 4.編寫本地YUM倉庫 local.repo [local] namelocal yum …

二叉樹—中序遍歷—非遞歸

初始狀態 假設當前從根節點 b 開始&#xff0c;此時棧為空 。 第一步&#xff1a;處理根節點 b 的左子樹 調用 goAlongLeftBranch 函數&#xff0c;從節點 b 開始&#xff0c;因為 b 有左子樹&#xff08;節點 a &#xff09;&#xff0c;將 b 入棧&#xff0c;此時棧&#…

R 語言科研繪圖第 45 期 --- 桑基圖-和弦

在發表科研論文的過程中&#xff0c;科研繪圖是必不可少的&#xff0c;一張好看的圖形會是文章很大的加分項。 為了便于使用&#xff0c;本系列文章介紹的所有繪圖都已收錄到了 sciRplot 項目中&#xff0c;獲取方式: R 語言科研繪圖模板 --- sciRplothttps://mp.weixin.qq.c…