C++中using關鍵字介紹

C++中using關鍵字介紹

C++中using關鍵字有兩種用法,using 指令(Using Directive)和using 聲明(Using Declaration)

using 指令影響整個命名空間,using 聲明只影響特定名稱。

using 指令

定義:using 指令(Using Directive)用于引入整個命名空間。

語法:

using namespace 命名空間名;

這會將整個命名空間引入當前作用域,使得該命名空間中的所有名稱都可以直接使用。

例子:

using namespace std;

// 現在可以直接使用cout、endl等std命名空間中的所有名稱

cout << "Hello" << endl;

其中,namespace是 C++ 關鍵字,表示接下來的是一個命名空間名。std是標準庫的命名空間名,是在 C++98 標準中引入的,它包含了 C++ 標準庫中的所有組件。這條語句是一個 using 指令(Using Directive),它將 std 命名空間中的所有名稱引入到當前作用域。std 是 C++ 標準庫使用的命名空間。它包含了諸如 cout, cin, vector, string 等常用的類、函數和對象。使得 std 命名空間中的所有名稱在當前作用域中可用,無需使用 std:: 前綴。例如,可以直接使用 cout 而不是 std::cout。

“using namespace std;”的替代方案:

使用特定的 using 聲明(后面將解釋“using 聲明”),如:

using std::cout;? // 只引入 cout

using std::endl;? // 只引入 endl

cout << "Hello, World!" << endl;? // 現在可以直接使用 cout 和 endl,無需 std:: 前綴

直接使用完全限定名稱,每次使用標準庫或 其他命名空間中的東西時,都明確指出它來自哪個命名空間。如:

std::cout << "Hello, World!" << std::endl;? // 每次使用 cout 和 endl 時都加上 std::

下面給出一個使用using指令的簡單而完整的示例,以使用using namespace std;為例。

使用 “using namespace std;”源碼為:

#include <iostream>
using namespace std; // 使用using指令“using namespace std; ”int main() {cout << "Hello, World!" << endl; // 現在可以直接使用 cout 和 endl,無需 std:: 前綴return 0;
}

若不使用 “using namespace std;”源碼為:

#include <iostream>int main() {std::cout << "Hello, World!" << std::endl; // 現在使用 cout 和 endl需要 std:: 前綴return 0;
}

順便提示,std是 C++ 標準庫的主要命名空間。但除了 std,C++ 還有一些其他的標準命名空間和常見的非標準命名空間。例如:

std::chrono: 用于時間相關的功能,是std的子命名空間。

std::filesystem (C++17起): 用于文件系統操作。

等等

許多庫和框架都定義了自己的命名空間。

自定義命名空間: 開發者可以創建自己的命名空間來組織代碼,如:

namespace myproject {

??? // 你的代碼

}

命名空間的定義使用關鍵字 namespace,后跟命名空間的名稱,可參見C++ 命名空間簡介https://blog.csdn.net/cnds123/article/details/117959454

還可以可以為長命名空間創建別名。

using 聲明

定義:using 聲明(Using Declaration)用于引入特定的名稱(如函數、類型或變量)到當前作用域。

語法:

using 命名空間名:: 特定名稱;

這只引入特定的名稱到當前作用域,而不是整個命名空間,特定名稱即你想要用的命名空間中的一個標識符。

例子:

using std::cout;

using std::endl;

// 只有cout和endl可以直接使用,其他std名稱仍需完全限定

cout << "Hello" << endl;

下面給出一個使用using 聲明的簡單而完整的示例:

#include <iostream>using std::cout;  // 只引入 cout
using std::endl;  // 只引入 endlint main() {cout << "Hello, World!" << endl;  // 現在可以直接使用 cout 和 endl,無需 std:: 前綴return 0;
}

完全限定名稱

語法:

命名空間名::特定名稱

完全限定名稱是指包含了所有嵌套命名空間的完整名稱,特定名稱即你想要用的命名空間中的一個標識符。例如:

std::cout << "Hello, World!" << std::endl;

這里,std::cout和std::endl就是完全限定名稱。它們明確指出這些名稱來自std命名空間。

完全限定名稱的優點是明確和不易混淆,但可能導致代碼冗長。using聲明則可以簡化代碼,但過度使用可能導致名稱沖突。

在實際編程中,通常會根據具體情況選擇使用完全限定名稱還是using聲明,以平衡代碼的清晰度和簡潔性。

下面給出一個使用完全限定名稱的簡單而完整的示例:

#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;  // 每次使用 cout 和 endl 時都加上 std::return 0;
}

using 指令(Using Directive)和using 聲明(Using Declaration)區別

using 指令(Using Directive)

優點:

??? 使用方便,可以快速訪問整個命名空間的所有成員。

??? 在編寫小型程序或快速原型時可以減少輸入。

缺點:

??? 可能導致名稱沖突,特別是在大型項目中。

??? 降低代碼的可讀性,因為不清楚某個名稱來自哪個命名空間。

??? 可能引入不必要的名稱到當前作用域,增加編譯時間。

using 聲明(Using Declaration)

優點:

??? 更精確,只引入需要的特定名稱,減少名稱沖突的風險。

??? 提高代碼可讀性,因為明確了使用的具體名稱。

??? 不會引入不必要的名稱,可能略微提高編譯速度。

缺點:

??? 對于頻繁使用的名稱,可能需要多次 using 聲明。

??? 在某些情況下可能顯得較為繁瑣。

總的來說,using 聲明通常被認為是更好的實踐,特別是在大型項目中。它提供了更好的控制和清晰度。然而,在一些簡單的情況下,using 指令可能更為方便。

using 指令、using 聲明放置位置

一般來而言:

??? 避免在全局作用域使用 using namespace std;,特別是在頭文件中。

??? 優先在最小必要的作用域內使用 using 聲明或指令。

??? 在函數或塊作用域內使用 using 是最安全的做法。

? ? 盡量使用特定的 using 聲明,而不是使用 using 指令。

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

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

相關文章

【Python實戰因果推斷】17_線性回歸的不合理效果7

目錄 Regression for Dummies Conditionally Random Experiments Dummy Variables Regression for Dummies 回歸和正交化固然很好&#xff0c;但歸根結底&#xff0c;你必須做出獨立性假設。你必須假設&#xff0c;在考慮到某些協變量的情況下&#xff0c;干預看起來與隨機分…

k8s 常用的命令

k8s 常用的操作 查找資源 kubectl get&#xff1a; 獲取所有的資源&#xff0c;包括node、namespace、pod 、service、deployment等&#xff0c;可以展示一個或者多個資源。 創建資源 kubectl create &#xff1a;Kubernetes 的清單文件可以用 json 或 yaml 定義。 更新資源 …

SQL Error: 1054, SQLState: 42S22

SQL 錯誤 1054 通常與 SQL 查詢中的未知列有關&#xff0c;SQLState 42S22表示列未找到錯誤。 解決方式&#xff1a; 檢查列名&#xff1a; 確保您在SQL查詢中使用的列名實際存在于您查詢的表中。可能存在拼寫錯誤或列名錯誤。驗證表名&#xff1a; 確認SQL查詢中的表名是否正…

python 獲取Shopee蝦皮商家店鋪商品列表 蝦皮api數據采集

此api接口可用于獲取蝦皮平臺商家店鋪的商品列表&#xff0c;目前land參數支持id、vn、my、th、sg、ph、tw&#xff08;印尼、越南、馬來、泰國、新加坡、菲律賓、臺灣&#xff09;。 若有需要&#xff0c;請點擊文末鏈接聯系我們。 詳細采集頁面如下 https://shopee.tw/yue…

使用Adobe Acrobat對PDF文檔進行數字簽名

文章目錄 前言一、使用Adobe Acrobat對PDF文檔進行數字簽名1.使用Adobe Acrobat打開需要進行簽名的PDF文檔2. 點擊【查看更多】3.點擊【使用證書】4.點擊【數字簽名】5.使用鼠標選定一個區域6.選擇您需要使用的證書 → 點擊【繼續】7.點擊【簽名】8.簽名成功 前言 一、使用Ado…

嵌入式C語言中指針與鏈表的關系詳解

假定給你一塊非常小的內存,這塊內存只有8字節,這里也沒有高級語言,沒有操作系統,你操作的數據單位是單個字節,你該怎樣讀寫這塊內存呢? 注意這里的限定,再讀一遍,沒有高級語言,沒有操作系統,在這樣的限制之下,你必須直面內存讀寫的本質。 這個本質是什么呢? 本質…

C++中constexpr和#define定義常量的區別

在C中&#xff0c;使用 constexpr 來定義常量和使用宏 #define 有幾個關鍵區別&#xff1a; 類型安全&#xff1a;constexpr 常量有類型&#xff0c;宏沒有類型。作用域&#xff1a;constexpr 常量遵循C的作用域規則&#xff0c;而宏是文本替換&#xff0c;不遵循作用域規則。…

基于xilinx FPGA的GTX/GTH/GTY位置信息查看方式(如X0Y0在bank幾)

目錄 1 概述2 參考文檔3 查看方式4查詢總結&#xff1a; 1 概述 本文用于介紹如何查看xilinx fpga GTX得位置信息&#xff08;如X0Y0在哪個BANK/Quad&#xff09;。 2 參考文檔 《ug476_7Series_Transceivers》 《pg156-ultrascale-pcie-gen3-en-us-4.4》 3 查看方式 通過…

語音大模型引領自然交互新時代,景聯文科技推出高質量語音大模型數據庫

近期&#xff0c;OpenAI正式發布語音大模型GPT-4o&#xff0c;可以綜合利用語音、文本和視覺信息進行推理&#xff0c;扮演一個個人語音交互助手。 在音頻處理方面&#xff0c;它不僅能識別和轉錄多種口音和方言&#xff0c;改變語音的速度音調和振動&#xff0c;還能進行聲音模…

vue中數據響應式選擇ref還是reactive?

vue中響應式選擇ref還是reactive合適 語法上來說&#xff0c;兩者都可以實現響應式&#xff0c;之所以有ref和reactive&#xff0c;是為了更加方便的將不同的數據類型分類處理。 主要區別&#xff1a;reactive只能聲明對象/數組&#xff0c;ref可以響應任意數據類型&#xff…

Vue.js 中的 v-if 和 v-show

Vue.js 中的 v-if 和 v-show&#xff1a;詳細解析與比較 在 Vue.js 中&#xff0c;v-if 和 v-show 是兩個常用的指令&#xff0c;用于控制元素的顯示和隱藏。盡管它們都能達到類似的效果&#xff0c;但它們的工作原理和適用場景有著顯著的區別。本文將深入探討這兩者之間的異同…

Codeforces Round 952 (Div. 4) G. D-Function 題解 數學 數論

D-Function 題目描述 Let D ( n ) D(n) D(n) represent the sum of digits of n n n. For how many integers n n n where 1 0 l ≤ n < 1 0 r 10^{l} \leq n < 10^{r} 10l≤n<10r satisfy D ( k ? n ) k ? D ( n ) D(k \cdot n) k \cdot D(n) D(k?n)k?D…

mybatisplus新增數據時生成的雪花id太長前端接收不準確怎么辦?

這是后端返回的&#xff1a;1807308955001573377 這是前端接收的&#xff1a;1807308955001573400 返回的long類型超過前端的最大長度了&#xff0c;渲染不了 只需要在WebMvcConfiguration配置類中重寫方法&#xff0c;如下 Overrideprotected void configureMessageConver…

深度學習:C++和Python如何對大圖進行小目標檢測

最近在醫美和工業兩條線來回穿梭&#xff0c;甚是疲倦&#xff0c;一會兒搞搞醫美的人像美容&#xff0c;一會兒搞搞工業的檢測&#xff0c;最近新接的一個項目&#xff0c;關于瑕疵檢測的&#xff0c;目標圖像也并不是很大吧&#xff0c;需要放大后&#xff0c;才能看見細小的…

基于Java的跨平臺移動應用開發

基于Java的跨平臺移動應用開發 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將探討基于Java的跨平臺移動應用開發&#xff0c;這是一種強大的技術方案…

使用 App Store Connect API 生成和讀取分析報告

文章目錄 前言安裝 API Swift SDK配置 API Swift SDK生成分析報告獲取所有可用的報告獲取報告的分段下載分段的數據總結 前言 Apple 最近推出了50多個新的分析報告&#xff0c;其中包含數百個新的數據點和指標&#xff0c;以幫助開發者了解他們的應用程序的表現情況。 這些報…

構建安全穩定的應用:Spring Security 實用指南

前言 在現代 Web 應用程序中&#xff0c;安全性是至關重要的一個方面。Spring Security 作為一個功能強大且廣泛使用的安全框架&#xff0c;為 Java 應用程序提供了全面的安全解決方案。本文將深入介紹 Spring Security 的基本概念、核心功能以及如何在應用程序中使用它來實現…

相比共享代理,為什么要用獨享代理IP?

隨著互聯網的廣泛普及和應用&#xff0c;涉及網絡隱私、數據安全和網絡訪問控制的問題變得越來越重要。代理服務器作為一種常見的網絡工具&#xff0c;可以在跨境電商、海外社媒、SEO投放、網頁抓取等領域發揮作用&#xff0c;實現匿名訪問并加強網絡安全。在代理服務器類別中&…

Hadoop:全面深入解析

Hadoop是一個用于大規模數據處理的開源框架&#xff0c;其設計旨在通過集群的方式進行分布式存儲和計算。本篇博文將從Hadoop的定義、架構、原理、應用場景以及常見命令等多個方面進行詳細探討&#xff0c;幫助讀者全面深入地了解Hadoop。 1. Hadoop的定義 1.1 什么是Hadoop …

CDC模型

引言 聚類是一種強大的機器學習方法&#xff0c;用于根據特征空間中元素的接近程度發現相似的模式。它廣泛用于計算機科學、生物科學、地球科學和經濟學。盡管已經開發了最先進的基于分區和基于連接的聚類方法&#xff0c;但數據中的弱連接性和異構密度阻礙了其有效性。在這項…