C++枚舉類

枚舉

C++11有作用域枚舉和無作用域枚舉

無作用域枚舉

特點

  1. 全局作用域:無作用域枚舉的成員(枚舉值)在包含它們的作用域內是直接可見的,不需要使用枚舉類型名稱作為前綴。

  2. 隱式類型轉換:無作用域枚舉的成員可以隱式地轉換為整數類型,這使得它們可以直接用在需要整數值的地方。

  3. 底層類型:在 C++98/03 中,無作用域枚舉的底層類型是由編譯器決定的,并且通常是足夠存儲所有枚舉值的最小整數類型。在 C++11 及以后的版本中,可以顯式指定無作用域枚舉的底層類型。

有作用域枚舉

特點

  1. 作用域限制:有作用域枚舉的成員必須通過枚舉類型名稱訪問。這樣可以防止命名沖突,也更清晰地表達了代碼意圖。

  2. 強類型:與無作用域枚舉不同,有作用域枚舉不支持隱式轉換到整數類型。這增加了類型安全性,避免了某些類型錯誤。

  3. 底層類型指定:在有作用域枚舉中,可以顯式地指定底層類型。這使得枚舉在不同平臺間具有更好的一致性和可控性。

  4. 前向聲明:有作用域枚舉支持前向聲明,這意味著可以在不提供成員列表的情況下聲明枚舉類型。

有作用域枚舉下 指定作用域

無作用域枚舉易發生名稱沖突

現代C++盡量用有作用域枚舉

枚舉項的性質

枚舉項缺省用0初始化 依次遞增

枚舉項底層是整數值

可以用常量表達式修改枚舉項的值

改變枚舉項某一項 后面的項則依次遞增

古老的C++代碼會采用枚舉的手段 定義constexpr static

指定枚舉項底層類型 表明尺寸

如下 sizeof(color)打印出來將會變成1

枚舉項可以隱式轉換成整數類型

但是反過來整數不能轉換成枚舉項

如下圖 編譯不通過

不允許整數隱式轉換成枚舉的原因是容易產生歧義 導致程序錯誤

如下 fun(100)是寫錯還是真是意圖 導致歧義 其次 C++有作用域枚舉是強類型的

如果要用就要static_cast顯示類型轉換



枚舉的定義與聲明

無作用域枚舉聲明

有作用域枚舉聲明?

有作用域枚舉缺省類型是int

聯合體

將多個類型合并到一起省空間

枚舉與聯合一起使用

匿名聯合

類似于無作用域

C++11聯合體定義非內建類型

C++11 引入了能夠在聯合體中使用非內建類型的能力,這些類型包括具有自定義構造函數、析構函數、拷貝構造函數和拷貝賦值運算符的類。

關鍵特性

  1. 構造和析構:在聯合體中使用具有非平凡構造函數和析構函數的類型時,必須顯式地調用這些函數。這是因為聯合體不會自動調用成員的構造函數和析構函數。

  2. 有限的類型:雖然 C++11 允許在聯合體中使用更復雜的類型,但并不是所有類型都可以用。特別是,不能在聯合體中使用具有虛函數或虛基類的類型。

  3. 顯式管理:你需要手動管理聯合體中對象的生命周期,包括合適地調用構造函數和析構函數。

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

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

相關文章

鴻蒙開發組件之ForEach列表

一、ForEach函數 ForEach函數是一個迭代函數,需要傳遞兩個必須參數和一個可選參數。主要通過迭代來獲取參數arr中的數據不斷的生成單個Item來生成鴻蒙中的列表樣式 二、先創建單個的Item的UI 通過嵌套Row與Column來實現單個Item的UI。例如圖中沒有折扣的可以看成一…

用23種設計模式打造一個cocos creator的游戲框架----(八)適配器模式

1、模式標準 模式名稱:適配器模式 模式分類:結構型 模式意圖:適配器模式的意圖是將一個類的接口轉換成客戶端期望的另一個接口。適配器模式使原本接口不兼容的類可以一起工作。 結構圖: 適用于: 系統需要使用現有的…

309. 買賣股票的最佳時機含冷凍期(leetcode) 動態規劃思想

文章目錄 前言一、題目分析二、算法原理1.狀態表示2.狀態轉移方程3.初始化邊界條件4.填表順序5.返回值是什么 三、代碼實現總結 前言 在本文章中,我們將要詳細介紹一下Leetcode中買賣股票的最佳時機含冷凍期相關的內容,本題采用動態規劃的思想解決 一、…

uniapp藍牙傳輸中文亂碼問題

uniapp藍牙傳輸中文亂碼問題 0 現狀 傳輸數字和字母的json字符串都可以解析,有個中文的硬件那邊就解析不了,替換一下發數據的處理函數即可 1 原先字符串轉化函數 const stringToBytes (msg) > {const buffer new ArrayBuffer(msg.length)const …

eclipse中一些文件的作用

.idea文件夾 .idea和.settings文件夾是IntelliJ IDEA的配置文件夾,用于存儲項目的配置信息。這些文件夾中包含了許多XML文件,這些XML文件包含了項目的各種配置信息,例如編譯選項、運行配置、代碼樣式、版本控制等等。 包含了一些名為modules.…

PyQt6 QDateEdit日期控件

?鋒哥原創的PyQt6視頻教程: 2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~共計39條視頻,包括:2024版 PyQt6 Python桌面開發 視頻教程(無廢話…

多數元素算法(leetcode第169題)

題目描述: 給定一個大小為 n 的數組 nums ,返回其中的多數元素。多數元素是指在數組中出現次數 大于 ? n/2 ? 的元素。你可以假設數組是非空的,并且給定的數組總是存在多數元素。示例 1:輸入:nums [3,2,3] 輸出&am…

Python:可以做什么?

簡介 Python是一種高級編程語言,因其簡單易學、代碼可讀性強和擁有豐富的標準庫而廣受歡迎。Python可以用于許多不同領域,主要包括: 數據分析與數據科學:Python有強大的數據處理和分析庫,如Pandas、NumPy和SciPy&…

空中消防員:無人機森林防火應用全面升級

森林是生態系統的重要組成部分,也是人類得以生存的關鍵。我國森林面積廣大,存在火災頻發的困境。提升森林火災防控能力是維護生態平衡、保護資源和保障人民生命安全的必要步驟。隨著無人機技術的發展,其在無人機森林防火中的應用為傳統巡查工…

Linux PSI-----Pressure Stall information

PSI——壓力阻塞信息 當CPU、memory或IO設備處于競爭狀態,業務負載會遭受時延毛刺、吞吐量降低, 及面臨OOM的風險。 如果沒有一種準確的方法度量系統競爭程度,則有兩種后果:一種是用戶過于節制, 未充分利用系統資源&…

Mybatis與Spring結合深探——MapperFactoryBean的奧秘

文章目錄 前言MapperFactoryBean的工作原理底層實現剖析MapperFactoryBean的checkDaoConfig()方法總結 MapperFactoryBean的getObject()方法 思考聯想后續 系列相關相關文章究竟FactoryBean是什么?深入理解Spring的工廠神器超硬核解析Mybatis動態代理原理&#xff0…

lv12 開發板啟動過程

1 開發板啟動過程 1.1 回顧芯片手冊第三章內存映射 對于arm來說,不是給它多大的內存都能讀。尋址空間(地址空間)讀寫范圍是有限的,尋址空間的大小與地址總線寬度有關,如32位,地址空間4G(2^32)…

NVMe over Fabrics with SPDK with iRDMA總結 - 3

6.0 Configure and Test NVMe over Fabrics Host(s) to Connect to SPDK Target配置和測試 NVMe over Fabrics 主機以連接 SPDK 目標機 The SPDK NVMe-oF target system is spec compliant, which allows for the use of either an SPDK host or Linux Kernel host to co…

【C語言基礎】嵌入式面試經典題(C語言篇)----有新的內容會及時補充、更新!

📢:如果你也對機器人、人工智能感興趣,看來我們志同道合? 📢:不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸對你有幫助,可點贊 👍…

Mac虛擬機CrossOver23破解版下載和許可證下載

CrossOver Mac Mac 和 Windows 系統之間的兼容工具。使 Mac 操作系統的用戶可以運行 Windows 系統的應用,從辦公軟件、實用工具、游戲到設計軟件, 您都可以在 Mac 程序和 Windows 程序之間隨意切換。 系統要求 運行macOS的基于Intel或Apple Silicon 的…

springboot項目加載配置文件失敗

問題 在使用springboot打成jar以后,需要文件加載一個redisson-cluster的配置文件。配置文件是在jar的同級目錄。啟動時卻總是加載jar中的配置文件,而外部配置文件卻不加載看下配置:spring:redis:redisson:# redis配置位置file: classpath:red…

lcx iptables rinetd 三個端口轉發流量分析

lcx流量分析 環境搭建 本機 :192.168.0.52 win7 : 192.168.0.247 10.0.0.3 win10: 10.0.0.10 win7 Lcx.exe -listen 7777 4444win10 Lcx.exe -slave 10.0.0.3 7777 127.0.0.1 3389然后使用遠程軟件連接 連的是192.168.0.247的4444 端口 …

基于Pytorch框架深度學的垃圾分類智能識別系統

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 垃圾分類智能識別系統是一種基于深度學習技術的智能系統,用于對垃圾進行分類和識別。它使用Pytorch框架…

【電路筆記】-壓敏電阻

壓敏電阻 文章目錄 壓敏電阻1、概述2、交流波形瞬變3、抗靜電能力4、特性曲線5、壓敏電阻電容值6、金屬氧化物壓敏電阻7、壓敏電阻應用8、總結 壓敏電阻是一種無源兩端固態半導體器件,用于為電氣和電子電路提供保護。 1、概述 與提供過電流保護的保險絲或斷路器不同…

Redis高效恢復策略:內存快照與AOF

第1章:Redis宕機恢復的重要性和挑戰 大家好,我是小黑。今天咱們來聊聊Redis宕機后的恢復策略。想象一下,你的網站突然宕機了,所有的數據都飄了,這種情況下,快速恢復數據就顯得尤為重要。Redis作為一個高性…