【c++】c++第一課:命名空間

文章目錄

  • 1.C++的第?個程序
  • 2.命名空間
    • 2.1 namespace的價值
    • 2.2 namespace的定義
    • 2.3 命名空間使?

最新的c++標準(建議收藏)

1.C++的第?個程序

C++兼容C語?絕?多數的語法,所以C語?實現的helloworld依舊可以運?,C++中需要把定義?件代碼后綴改為.cpp,vs編譯器看到是.cpp就會調?C++編譯器編譯

#include<stdio.h> 
int main() 
{ printf("hello world\n");  return 0; 
}

當然C++有?套??的輸?輸出,嚴格說C++版本的helloworld應該是這樣寫的:

#include<stdio.h> 
using namespace std; 
int main() 
{ cout << "hello world\n" << endl;  return 0; 
}

2.命名空間

2.1 namespace的價值

在C/C++中,變量、函數和類的名稱將都存在于全局作?域中,可能會導致很多沖突。

同一作用域不可重復定義同個變量

使?命名空間的?的是對標識符的名稱進?本地化,以避免命名沖突或名字污染,namespace關鍵字的出現可以解決這個問題

//rand在全局作用域出現兩次
#include<stdio.h>     
#include<stdlib.h>//包含rand函數  
int rand = 10;//新的全局變量 
int main() 
{ // 編譯報錯:error C2365: “rand”: 重定義;以前的定義是“函數”  printf("%d\n", rand);//不知打印哪個 return 0; 
}

2.2 namespace的定義

? 定義命名空間,需要使?到namespace關鍵字,后?跟命名空間的名字,然后接?對{}即可,{}中即為命名空間的成員。命名空間中可以定義變量/函數/類型等。

? namespace本質是定義出?個域,這個域跟全局域各?獨?,不同的域可以定義同名變量,所以下?的rand不在沖突了

? C++中域有函數局部域,全局域,命名空間域,類域;域影響的是編譯時語法查找?個變量/函數/ 類型出處(聲明或定義)的邏輯,所以如果有了域隔離,名字沖突就解決了(局部域和全局域除了會影響編譯查找邏輯,還會影響變量的?命周期,命名空間域和類域不影響變量?命周期)

? namespace只能定義在全局而且還可以嵌套定義

? 項??程中多?件中定義的同名namespace會認為是?個namespace,不會沖突

? C++標準庫都放在?個叫std(standard)的命名空間中

#include<stdio.h>     
#include<stdlib.h>  
// 1. 正常的命名空間定義  
namespace name 
{ // 命名空間中可以定義變量/函數/類型  int rand = 10; int Add(int left, int right) { return left + right; } struct Node { struct Node* next; int val; }; 
} 
int main() 
{ // 這?默認是訪問的是全局的rand函數指針//編譯器語法查找確認,默認先局部查找->全局查找//::域作用限定符printf("%p\n", rand); // 這?指定name命名空間中的rand//編譯器語法查找確認,指定作用域,就直接去這個域查找->沒有找到就報錯未聲明的標識符printf("%d\n", bit::name); return 0; 
}
//2. 命名空間可以嵌套  
namespace name 
{  namespace wl{ int rand = 1; int Add(int left, int right) { return left + right; } }  namespace wll{ int rand = 2; int Add(int left, int right) { return (left + right)*10; } } 
} 
int main() 
{ printf("%d\n", name::wl::rand); printf("%d\n", name::wll::rand); printf("%d\n", name::wl::Add(1, 2)); printf("%d\n", name::wll::Add(1, 2)); return 0; 
} 

在這里插入圖片描述

2.3 命名空間使?

編譯查找?個變量的聲明/定義時,默認只會在局部或者全局查找,不會到命名空間??去查找。所以下?程序會編譯報錯。所以我們要使?命名空間中定義的變量/函數,有三種?式:

? 指定命名空間訪問,項?中推薦這種?式。

? using將命名空間中某個成員展開,項?中經常訪問的不存在沖突的成員推薦這種?式。

? 展開命名空間中全部成員,項?不推薦,沖突?險很?,?常?練習程序為了?便推薦使?。

#include<stdio.h>     
namespace bit 
{ int a = 0; int b = 1; 
} 
int main() 
{ // 編譯報錯:error C2065: “a”: 未聲明的標識符  printf("%d\n", a); return 0; 
}
// 指定命名空間訪問  
int main() 
{ printf("%d\n", N::a); return 0;  
} 
// using將命名空間中某個成員展開  
using N::b; 
int main() 
{ printf("%d\n", N::a); printf("%d\n", b); return 0;  
} 
// 展開命名空間中全部成員  
using namespace N; 
int main() 
{ printf("%d\n", a); printf("%d\n", b); return 0;  
} 

注意:允許存在未命名的空間

#include<stdio.h>
namespace
{int a = 0; int b = 1; 
}
int main()
{printf("%d",a);
}

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

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

相關文章

版本發布流程手冊:Release分支規范與Bug分級標準全解析

在軟件交付日益高頻、用戶需求快速迭代的今天&#xff0c;版本發布流程的規范性直接決定了團隊的交付效率、產品質量和用戶滿意度。然而&#xff0c;許多團隊仍面臨以下痛點&#xff1a; 發布混亂&#xff1a;分支管理隨意&#xff0c;代碼沖突頻發&#xff1b;質量失控&#…

什么是CA根證書

CA 根證書&#xff08;Certificate Authority Root Certificate&#xff09;是 數字證書體系&#xff08;PKI&#xff0c;Public Key Infrastructure&#xff09; 中的核心證書。它有幾個關鍵點&#xff1a;1. 定義 CA&#xff08;Certificate Authority&#xff09;&#xff1…

git push -u origin main 這個-u起什么作用

git push -u origin main 里的 -u 等價于 --set-upstream&#xff0c;它的作用是&#xff1a;&#x1f449; 把本地分支 main 和遠程分支 origin/main 綁定&#xff08;建立追蹤關系&#xff09;。&#x1f539; 具體效果第一次推送分支時&#xff0c;如果加了 -u&#xff1a;本…

【Unity基礎】兩個關于UGUI中Text對非英文字體支持的問題

問題1&#xff1a;Unity中為什么UGUI中的Text(Textmeshpro&#xff09;默認不支持非英文字體&#xff0c;而legacy中的text卻可以呢&#xff1f; 在Unity中&#xff0c;TextMeshPro&#xff08;TMP&#xff09;默認不支持非英文字體&#xff0c;而Legacy Text支持&#xff0c;主…

碎片時間干活的好手(requestIdleCallback)

&#x1f7e2; What —— 它是什么&#xff1f; requestIdleCallback(callback[, options]) 是瀏覽器提供的一個 API&#xff0c;用來在主線程空閑時執行一些優先級不高的任務。 它的特點&#xff1a; 異步執行&#xff1a;不會打斷關鍵的渲染、交互、動畫。節省性能&#xff1…

第三方網站測評:【WEB應用文件包含漏洞(LFI/RFI)的測試步驟】

文件包含漏洞分為本地文件包含(LFI)和遠程文件包含(RFI)兩類。LFI允許讀取服務器本地文件,RFI可執行遠程服務器上的惡意代碼。PHP應用中include()、require()等函數未正確過濾用戶輸入時易產生此類漏洞。 檢測URL中可能包含文件的參數,常見特征如下: 參數名包含file、pa…

網絡爬蟲(web crawler)

文章目錄一、什么是網絡爬蟲二、爬蟲工作流程詳解第1步&#xff1a;起始點 - URL種子庫&#xff08;Seed URLs&#xff09;第2步&#xff1a;大腦 - 調度器&#xff08;Scheduler&#xff09;第3步&#xff1a;雙手 - 網頁下載器&#xff08;Downloader&#xff09;第4步&#…

redis的高可用(哨兵)

Redis 的主從復制模式下&#xff0c;一旦主節點由于故障不能提供服務&#xff0c;需要人工進行主從切換&#xff0c;同時大量的客戶端需要被通知切換到新的主節點上&#xff0c;對于上了一定規模的應用來說&#xff0c;這種方案是無法接受的&#xff0c;于是Redis從2.8開始提供…

安徽某能源企業積極推進運維智能化轉型,引入高壓配電房機器人巡檢系統

在工業自動化與智能化深度融合的當下&#xff0c;機器人技術已成為能源行業提質增效的關鍵支撐。特別是在配電房這類高壓電力核心區域的運維工作中&#xff0c;傳統人工巡檢不僅面臨效率低下、巡檢周期長的困境&#xff0c;更因人員直接接觸高壓設備而存在極高的安全風險。此&a…

數據結構_二叉平衡樹

#include <stdio.h> #include <stdlib.h> #define max(a,b) ((a > b)? (a):(b))//平衡二叉樹的節點結構 typedef struct AVL_TreeNode{int data; //數據域struct AVL_TreeNode* l;struct AVL_TreeNode* r;int h;//記錄樹的高度&#xff0c;用于計算平衡因子 }…

掃描件、PDF、圖片都能比對!讓文檔差異無所遁形

智能文檔比對系統可精準識別文檔差異&#xff0c;解決金融、法律等多方協作場景下的版本混亂、審核低效和合規風險問題&#xff0c;將一份百頁文檔的人工核對從數小時縮短至3分鐘以內。 文檔差異比對常見場景有哪些&#xff1f; 每一次文檔的修改都可能帶來潛在風險&#xff0c…

excel里面店鋪這一列的數據結構是2C【uniteasone17】這種,我想只保留前面的2C部分,后面的【uniteasone17】不要

這個結構是&#xff1a; 2C【uniteasone17】只要取前面的 2C 部分&#xff0c;可以用 Excel 的 公式 或者 文本函數 來實現。 方法 1&#xff1a;使用公式提取 假設店鋪數據在 A2 單元格&#xff1a; LEFT(A2,FIND("【",A2)-1)&#x1f449; 解釋&#xff1a; FIND(“…

四、神經網絡的學習(中)

4.3 數值微分梯度法使用梯度的信息決定前進的方向。本節將介紹梯度是什么、有什么性質等內容。4.3.1 導數假如你是全程馬拉松選手&#xff0c;在開始的10分鐘內跑了2千米。如果要計算此時的奔跑速度&#xff0c;則為2/10 0.2&#xff3b;千米/分&#xff3d;。也就是說&#x…

Jenkins 監控方案:Prometheus + Grafana 實踐

這兩天在運維群里面看到有人說 Jenkins 節點也可以監控&#xff0c;以前沒想過搞這個&#xff0c;現在就對公司 Jenkins 搞搞順便記錄下唄。 一、使用 Jenkins Prometheus 插件&#xff08;推薦方式&#xff09; 1. 安裝插件 在 Jenkins 插件管理里搜索并安裝 Prometheus Me…

用博圖FB類比c#中sdk的api

我有一個大膽的想法我準備自己做個簡單的視覺軟件來鍛煉自己的c#編程能力&#xff0c;我準備用到海康工業機器人官網下載的mvs軟件的sdk,聽說sdk的主要作用就是api提供了開放的接口給第三方免費調用。按照我的理解&#xff0c;api接口就像西門子博圖的FB塊&#xff0c;所謂api接…

【Leetcode】高頻SQL基礎題--1164.指定日期的產品價格

【Leetcode】高頻SQL基礎題–1164.指定日期的產品價格 要求&#xff1a;一開始&#xff0c;所有產品價格都為 10。編寫一個解決方案&#xff0c;找出在 2019-08-16 所有產品的價格。 以 任意順序 返回結果表。解題思路&#xff1a; 找到 2019-08-16 前所有有改動的產品及其最新…

Django全局異常處理全攻略

在 Django 中處理全局異常&#xff0c;有幾種常見的方式&#xff0c;通常目標是&#xff1a; 捕獲項目中未被單獨處理的錯誤統一返回給前端&#xff08;如 JSON 響應 / 自定義錯誤頁&#xff09;方便記錄日志1. 使用 Django 自帶的全局異常處理機制 Django 有一些內置的全局錯誤…

【開題答辯全過程】以電商數據可視化系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

MyBatis入門到精通:CRUD實戰指南

1. MyBatisORM&#xff1a;對象關系映射O&#xff08;Object&#xff09;&#xff1a;Java虛擬機中的Java對象R&#xff08;Relational&#xff09;&#xff1a;關系型數據庫M&#xff08;Mapping&#xff09;&#xff1a;將Java虛擬機中的Java對象映射到數據庫表中一行記錄&am…

WebRTC開啟實時通信新時代

摘要&#xff1a;WebRTC&#xff08;Web實時通信&#xff09;是一項開源技術&#xff0c;支持瀏覽器直接進行低延遲音視頻通信和數據傳輸&#xff0c;無需安裝插件。其核心技術包括RTCPeerConnection&#xff08;建立點對點連接&#xff09;、MediaStream&#xff08;媒體流處理…