【C++】using namespace std 到底什么意思

📢博客主頁:https://blog.csdn.net/2301_779549673
📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
📢本文作為 JohnKi 的學習筆記,引用了部分大佬的案例
📢未來很長,值得我們全力奔赴更美好的生活?

在這里插入圖片描述

在這里插入圖片描述

文章目錄

  • 📢前言
  • 🏳??🌈什么是 namespace
  • 🏳??🌈如何定義 namespace
    • ??定義
      • 嵌套
      • 融合
  • 🏳??🌈如何使用 namespace
  • 👥總結


📢前言

要建造簡單的房屋,首先要打地基、搭框架。如果一開始沒有牢固的結構,后面就很難建造窗子、門框、圓屋頂和鑲木地板的舞廳等。同樣,學習計算機語言時,應從程序的基本結構開始學起。只有這樣,才能一步一步了解其具體細節,如循環和對象等。

這篇博客,筆者就介紹一下由 C語言 轉到 C++ 時,我們第一個會遇到的語句即 using namespace std ,并著重介紹一下其中的含義和由來


🏳??🌈什么是 namespace

Namespace(命名空間)是在計算機科學中常見的概念,用于表示符號的命名范圍或作用域。在編程中,命名空間通常用于避免命名沖突,即當多個庫、模塊或包中存在相同名稱的變量、函數或類時,通過將它們放置在不同的命名空間中來區分它們。

我們可以先看一下下面這塊C語言的代碼

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int rand = 1;int main()
{printf("%d", rand);return 0;
}

如果不存在什么命名問題的話,這里會出現的結果將是1,但是我們實操會發現出現重定義的錯誤提示
在這里插入圖片描述

為什么會出現?

那是因為在stdlib.h庫中也存在rand這個變量名

因此

在當項目量過大,項目人數過多時,時常會出現一些大佬們命名重復的情況,為了避免這個情況,于是就在C++中引用了namespace,用來存放和保證命名庫不出錯,解決命名沖突


🏳??🌈如何定義 namespace

??定義

定義語法:

namespace N1
{//支持變量int a = 1;//支持函數int fun(){return 1;}//支持結構體struct S{int s;};
}

我們通過 namespace + 命令空間名 + {} 在花括號中填入想要命名的變量就可以了

基本上的類型都是支持的

嵌套

namespace N2
{int a = 1;namespace N3{int b = 1;}
}

不僅如此namespace是支持嵌套使用的,就比如這里在N2空間內我們又創建了一個N3的命名空間

融合

同一個工程中,允許存在多個相同名稱的命名空間,編譯器最后會把他們合成一個命名空間

namespace N4
{int a = 1;
}
namespace N4
{int b = 2;
}

融合結果

namespace N4
{int a = 1;int b = 2;
}

🏳??🌈如何使用 namespace

既然已經知道了namespace的定義方法,那自然需要知道如何使用了

這里就可以介紹一下using namespace std的具體含義了

這其實就是一個名為std的命名空間的直接使用,std可以看為C++語法的標準數據命名空間,就像C語言中的stdio.h一樣,在C++中常使用的count,cin等都是出自于這個命名庫中,C++標準庫中的函數或者對象都是在命名空間std中定義的。

我們使用using namespace std就相當于把C++標準庫外殼拆除,因此就可以使用里面的對象和函數了

  • 這就是方法1直接使用,using namespace + 命名空間名
#include<stdio.h>
namespace N 
{int a = 10;int b = 20;
}
using namespace N;
int main()
{printf("%d\n", a); // 正常打印return 0; 
}
  • 而方法2則是使用using將命名空間中成員引入,using + 命名空間名 + :: +成員名
using N::b;
int main()
{printf("%d\n", b);return 0; 
}

這樣如果僅僅是需要利用命名空間內的指定成員名直接這樣引用就行了

  • 方法3就是命名空間名 + :: + 變量名

這里可以引用一下全局變量局部變量

比如下面這個例子

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

這部分代碼沒有出錯,因為在指定作用域內,優先局部變量

但如果我們要在這部分域內使用全局變量又該怎么做呢,就需要在變量名前加上::就行了

#include <iostream>
using namespace std;
int a = 0;
int main()
{int a = 1;printf("訪問局部變量(a):%d\n",a);printf("訪問全局變量(::a):%d\n",::a);return 0;
}

那如果在C++中,有很多個命名空間呢,那就是用方法3命名空間名 + :: + 變量名

#include <iostream>
using namespace std;
int main()
{cout << 1 << endl;
}

這部分代碼就可以改成

#include <iostream>
int main()
{std::cout << 1<< std::endl;
}

👥總結

using namespace std; 是一個用于C++編程的命名空間指令,它通常出現在C++程序的頂部。它的作用是將標準C++庫中的所有標識符引入到當前的命名空間中,使得你可以直接使用這些標識符,而無需在前面添加命名空間限定符 std::。

具體來說,當你編寫C++程序并使用標準C++庫中的類、函數、對象或其他標識符時,通常需要添加 using namespace 命名空間名;using 命名空間名 變量名 或使用 命名空間名:: 前綴來限定命名空間。


本篇博文對 C++中namespace 做了一個較為詳細的介紹,不知道對你有沒有幫助呢

覺得博主寫得還不錯的三連支持下吧!會繼續努力的~

請添加圖片描述

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

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

相關文章

新手練習項目 7:猜數字游戲

名人說&#xff1a;莫聽穿林打葉聲&#xff0c;何妨吟嘯且徐行。—— 蘇軾《定風波莫聽穿林打葉聲》 Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#xff09; 目錄 一、項目描述二、項目實現三、項目步驟四、項目擴展方向 更多項目內容&#xff0c;請關注我、訂…

comsol學習筆記

comsol巖土力學與流固耦合的學習 comsol的相關視頻教程 https://www.bilibili.com/video/BV1Cu4y1r7Gn/?spm_id_from333.337.search-card.all.click&vd_source02b2bad477a153eaeb9c48cbbedaf8df [這里面有講解地應力平衡技術] https://www.bilibili.com/video/BV17C4y1j…

打靶記錄——靶機medium_socnet

靶機下載地址 https://www.vulnhub.com/entry/boredhackerblog-social-network,454/ 打靶過程 由于靶機和我的Kali都處于同一個網段&#xff0c;所以使用arpscan二次發現技術來識別目標主機的IP地址 arpscan -l除了192.168.174.133&#xff0c;其他IP都是我VMware虛擬機正…

【Spring Boot】認識 JPA 的接口

認識 JPA 的接口 1.JPA 接口 JpaRepository2.分頁排序接口 PagingAndSortingRepository3.數據操作接口 CrudRepository4.分頁接口 Pageable 和 Page5.排序類 Sort JPA 提供了操作數據庫的接口。在開發過程中繼承和使用這些接口&#xff0c;可簡化現有的持久化開發工作。可以使 …

springboot學習,如何用redission實現分布式鎖

目錄 一、springboot框架介紹二、redission是什么三、什么是分布式鎖四、如何用redission實現分布式鎖 一、springboot框架介紹 Spring Boot是一個開源的Java框架&#xff0c;由Pivotal團隊&#xff08;現為VMware的一部分&#xff09;于2013年推出。它旨在簡化Spring應用程序…

大數據面試題之Spark(1)

目錄 Spark的任務執行流程 Spark的運行流程 Spark的作業運行流程是怎么樣的? Spark的特點 Spark源碼中的任務調度 Spark作業調度 Spark的架構 Spark的使用場景 Spark on standalone模型、YARN架構模型(畫架構圖) Spark的yarn-cluster涉及的參數有哪些? Spark提交jo…

橫穿自動駕駛

如果有一條線&#xff0c;可以穿起來所有自動駕駛的核心模塊&#xff0c;那么我感覺它就是最優化&#xff0c;選擇優化變量、構造優化問題、求解優化問題&#xff0c;這幾個步驟貫穿了自動駕駛的始終。 先從我的自身接觸順序寫起。最開始做個一點深度學習&#xff0c;那還是20…

編碼大模型系列:Meta創新的“代碼編譯優化”的LLM

魯班號導讀正式上線。移步“魯班秘笈”&#xff0c;查閱更多內容。 大型語言模型 (LLM) 已在各種軟件工程和編碼任務中展現出卓越的能力。然而&#xff0c;它們在代碼和編譯器優化領域的應用仍未得到充分探索。訓練LLM需要大量資源&#xff0c;需要大量的 GPU時間和大量的數據…

23、架構-服務網格之透明通信涅槃

通信成本 在現代分布式系統中&#xff0c;服務之間的通信是不可避免的。然而&#xff0c;這種通信帶來了額外的復雜性和成本。傳統的通信方式如RPC&#xff08;Remote Procedure Call&#xff09;和REST&#xff08;Representational State Transfer&#xff09;&#xff0c;雖…

Hive 實操案例五:統計每個類別中 Top10 的視頻熱度

一、數據表結構 視頻表 t_video 字段注釋描述videoId視頻唯一 id&#xff08;String&#xff09;11 位字符串uploader視頻上傳者&#xff08;String&#xff09;上傳視頻的用戶名 Stringage視頻年齡&#xff08;int&#xff09;視頻在平臺上的整數天category視頻類別&#xff0…

一個合理的前端應用文件結構

在大型應用中&#xff0c;最關鍵且最具挑戰性的方面之一就是擁有一個良好且合理的文件結構。在考慮通過微前端將代碼庫拆分成多個應用之前&#xff0c;可以遵循一些步驟來改善項目級別的架構&#xff0c;并在您考慮這一路徑時使過渡更容易。 我們的目標是應用某種模塊化方法&am…

MSPM0G3507——定時器例程講解4——timx_timer_mode_periodic

以下示例以周期模式配置TimerG并切換LED。周期從500ms開始&#xff0c;每次切換減少50ms&#xff0c;直到周期為100ms&#xff0c;然后重復。設備在等待中斷時保持待機模式 #include "ti_msp_dl_config.h"/* ((32KHz / (321)) * 0.5s) 45 - 1 495 due to N1 ticks …

MySQL入門學習-MySQL日志.錯誤日志

錯誤日志是 MySQL 中一種記錄服務器運行過程中錯誤信息的日志文件。它可以幫助管理員或開發人員快速定位和解決問題。 一、MySQL 中的錯誤日志具有以下特點&#xff1a; - 記錄錯誤信息&#xff1a; 錯誤日志主要記錄服務器在運行過程中發生的錯誤信息&#xff0c;包括但不限…

【算法 之選擇排序 原理及案例】

選擇排序&#xff08;Selection Sort&#xff09; 是一種簡單直觀的排序算法。它的工作原理是&#xff1a;首先在未排序序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再從剩余未排序元素中繼續尋找最小…

Memcached的API使用指南:常用操作與示例代碼

Memcached 是一個高性能、分布式內存對象緩存系統&#xff0c;常用于加速動態Web應用程序&#xff0c;減輕數據庫負載。本文將介紹如何使用Memcached的API進行常用操作&#xff0c;并提供示例代碼。 1. 安裝Memcached客戶端庫 在使用Memcached之前&#xff0c;需要安裝相應的…

Qt中用QLabel創建狀態燈

首先ui設計中分別創建了4個大燈和4個小燈。 編輯.h文件 #ifndef LED_H #define LED_H#include <QWidget> #include <QLabel>QT_BEGIN_NAMESPACE namespace Ui { class Led; } QT_END_NAMESPACEclass Led : public QWidget {Q_OBJECTpublic:Led(QWidget *parent n…

Spring MVC數據綁定和響應——復雜數據綁定(四)JSON數據綁定

一、消息轉換器—HttpMessageConverter接口 客戶端不同的請求&#xff0c;HttpServletRequest中數據的MediaType可能會不同&#xff0c;如果想將HttpServletRequest中的數據轉換成指定對象&#xff0c;或者將對象轉換成指定格式的數據&#xff0c;就需要使用對應的消息轉換器來…

服務器硬件以及RAID配置

目錄 一、RAID磁盤陣列原理&#xff08;嘎嘎重要&#xff09; 1、RAID的概述 2、常用的RAID 2.1、RAID 0 2.2、RAID 1 2.3、RAID 5 2.5、RAID 10 3、陣列卡介紹 二、建立軟件RAID磁盤陣列 1、添加硬盤 2、使用fdisk分區&#xff0c;類型為fd 3、mdata命令使用參數 …

安全與加密常識(3)什么是數字簽名和數字證書

文章目錄 數字簽名工作原理關鍵特點應用實例 數字證書數字證書和數字簽名趣味實例 數字簽名 數字簽名是一種通過密碼運算生成的數據&#xff0c;用于驗證信息的完整性和來源&#xff0c;確保數據在傳輸過程中未被篡改&#xff0c;同時提供發送者的身份認證和防止抵賴的功能。它…

Qt: QPushButton 按鈕實現 上圖標下文字

效果如下&#xff1a; 實現有如下幾種方式&#xff1a; 1. 使用 QPushButton 設置 setStyleSheet 例&#xff1a; ui->recorder->setStyleSheet("QPushButton{"\"border: 1px solid #00d2ff; "\"min-height: 60px; "\"col…