C++23 已棄用特性

文章目錄

    • 1. `std::aligned_storage` 與 `std::aligned_union`
      • 1.1 特性介紹
      • 1.2 被棄用的原因
      • 1.3 替代方案
    • 2. `std::numeric_limits::has_denorm`
      • 2.1 特性介紹
      • 2.2 被棄用的原因
    • 3. 總結

C++23 已棄用特性包括:std::aligned_storage、std::aligned_union 與 std::numeric_limits::has_denorm

在C++的發展歷程中,標準庫不斷演進,一些特性會隨著時間推移而被棄用。C++23 中,std::aligned_storagestd::aligned_union(提案 P1413R3)以及 std::numeric_limits::has_denorm(提案 P2614R2)就被列入了棄用名單。下面我們來詳細了解這些特性以及它們被棄用的原因。

1. std::aligned_storagestd::aligned_union

1.1 特性介紹

std::aligned_storage 是 C++11 引入的一個模板結構,定義在 <type_traits> 頭文件中,用于創建具有特定大小和對齊要求的未初始化存儲空間。它主要用于需要手動管理內存對齊的場景,確保在使用某些類型時不會出現對齊問題。其語法如下:

  template <std::size_t Len, std::size_t Align = alignof(std::max_align_t)>struct aligned_storage;

其中,Len 表示所要分配的存儲空間的大小(以字節為單位),Align 表示存儲空間的對齊要求(以字節為單位),默認值為 std::max_align_t,即該值將會滿足所有數據類型的對齊要求,該值由編譯器和系統共同決定。例如,在 x86 - 64 平臺上,最大對齊值通常是 16 個字節,因為 long double 類型的對齊值是 16 個字節;在 ARM 平臺上,最大對齊值可能會是 8 個字節,因為 double 類型的對齊值是 8 個字節。

使用如下語句可以得到一個類型:

  std::aligned_storage<20,4>::type  // 定義了一個20字節為大小,4字節對齊(地址為4的倍數)的內存塊類型

上述語句定義了一個 20 字節為大小,4 字節對齊(地址為 4 的倍數)的內存塊類型,使用該類型可以在堆空間或棧空間上分配該內存塊。

std::aligned_unionstd::aligned_storage 類似,也用于創建具有特定對齊要求的存儲,不過它更側重于聯合類型的存儲。

1.2 被棄用的原因

std::aligned_storagestd::aligned_union 被棄用的主要原因是它們不能很好地滿足實際使用需求。例如,aligned_storage 不能保證準確適應存儲需求,其規格說明簡單,只保證成員類型 type 是一個簡單的標準布局類型,適合用作任何大小至多為 Len 且對齊方式是對齊的除數的對象的未初始化存儲,但不能保證它能夠準確地適應。也就是說,保證 aligned_storage<16>::type 至少為 16 個字節,但是一個符合標準的實現可以輕松地為您提供 32 個字節或 4K 字節。這就可能導致意外使用,給開發者帶來困擾。

1.3 替代方案

可以使用類似 libstdc++__aligned_membuf 來替代,示例代碼如下:

  template <typename T>struct storage_for {alignas(T) std::byte data[sizeof(T)];// 可以添加一些有用的構造函數和方法,可能還會有一個返回 T* 或 T const* 的獲取器};

2. std::numeric_limits::has_denorm

2.1 特性介紹

std::numeric_limits 是 C++ 標準庫中的一個模板類,定義在 <limits> 頭文件中,它提供了查詢各種算術類型屬性的標準化方式。例如,std::numeric_limits<int>::max() 可以獲取 int 類型的最大可能值。

std::numeric_limits::has_denormstd::numeric_limits 類的一個靜態成員常量,用于鑒別浮點類型所用的非正規風格。其值可以是以下幾種情況:

  • std::denorm_absent:表示該類型不支持非正規值。
  • std::denorm_present:表示該類型支持非正規值。

標準特化中,對于大多數整數類型,has_denorm 的值為 std::denorm_absent;對于 floatdoublelong double 類型,通常為 std::denorm_present

2.2 被棄用的原因

目前尚未找到明確的官方文檔說明 std::numeric_limits::has_denorm 被棄用的原因,但推測可能是隨著浮點運算標準的發展和完善,這個特性的實用性逐漸降低,或者有更好的替代方式來處理相關的浮點類型屬性查詢。

3. 總結

C++ 標準庫的不斷更新和棄用一些特性是為了讓語言更加簡潔、安全和高效。雖然 std::aligned_storagestd::aligned_unionstd::numeric_limits::has_denorm 被棄用了,但我們可以通過了解它們被棄用的原因,學習到如何更好地使用 C++ 進行編程,避免使用這些可能帶來問題的特性,并采用更合適的替代方案。

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

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

相關文章

十三、【核心功能篇】測試計劃管理:組織和編排測試用例

【核心功能篇】測試計劃管理:組織和編排測試用例 前言準備工作第一部分:后端實現 (Django)1. 定義 `TestPlan` 模型2. 生成并應用數據庫遷移3. 創建 `TestPlanSerializer`4. 創建 `TestPlanViewSet`5. 注冊路由6. 注冊到 Django Admin第二部分:前端實現 (Vue3)1. 創建 `Test…

STM32最小CLion開發環境

文章目錄 1 必須文件2 工具鏈3 CLion 全局配置4 CLion 新項目配置ST-Link 調試 5 點亮 LED6 分析 elf 文件7 項目模板 1 必須文件 ST 提供的頭文件支持 MDK-ARM, GCC, IAR 3種編譯器, 下面采用 GCC 編譯器 Arm GNU Toolchain Downloads – Arm Developer 或 安裝包版 調試器服…

核函數:解鎖支持向量機的強大能力

在機器學習的世界中&#xff0c;支持向量機&#xff08;SVM&#xff09;是一種強大的分類算法&#xff0c;而核函數則是其背后的“魔法”&#xff0c;讓 SVM 能夠處理復雜的非線性問題。今天&#xff0c;我們就來深入探討核函數的奧秘&#xff0c;看看它們是如何幫助 SVM 在高維…

【Go-6】數據結構與集合

6. 數據結構與集合 數據結構是編程中用于組織和存儲數據的方式&#xff0c;直接影響程序的效率和性能。Go語言提供了多種內置的數據結構&#xff0c;如數組、切片、Map和結構體&#xff0c;支持不同類型的數據管理和操作。本章將詳細介紹Go語言中的主要數據結構與集合&#xf…

3. 簡述node.js特性與底層原理

&#x1f63a;&#x1f63a;&#x1f63a; 一、Node.js 底層原理&#xff08;簡化版&#xff09; Node.js 是一個 基于 Chrome V8 引擎構建的 JavaScript 運行時&#xff0c;底層核心由幾部分組成&#xff1a; 組成部分簡要說明 1.V8 引擎 將 JS 編譯成機器碼執行&#xff0…

Web開發主流前后端框架總結

&#x1f5a5; 一、前端主流框架 前端框架的核心是提升用戶界面開發效率&#xff0c;實現高交互性應用。當前三大主流框架各有側重&#xff1a; React (Meta/Facebook) 核心特點&#xff1a;采用組件化架構與虛擬DOM技術&#xff08;減少真實DOM操作&#xff0c;優化渲染性能&…

大語言模型備案與深度合成算法備案的區別與聯系

“什么情況下做算法備案&#xff1f;” “什么情況下做大模型備案呢&#xff1f;” 進行大模型備案的企業必然要進行算法備案&#xff0c;而進行算法備案的企業則需根據其提供的服務性質判斷是否需要進行大模型備案。 算法備案與大模型備案已經是個老生常談的話題了&#xf…

微軟PowerBI考試 PL300-Power BI 入門

Power BI 入門 上篇更新了微軟PowerBI考試 PL-300學習指南&#xff0c;今天分享PowerBI入門學習內容。 簡介 Microsoft Power BI 是一個完整的報表解決方案&#xff0c;通過開發工具和聯機平臺提供數據準備、數據可視化、分發和管理。 Power BI 可以從使用單個數據源的簡單…

【Hive入門】

之前實習寫的筆記&#xff0c;上傳留個備份。 1. 使用docker-compose快速搭建Hive集群 使用docker快速配置Hive環境 拉取鏡像 2. Hive數據類型 隱式轉換&#xff1a;窄的可以向寬的轉換顯式轉換&#xff1a;cast 3. Hive讀寫文件 SerDe:序列化&#xff08;對象轉為字節碼…

設計模式——簡單工廠模式(創建型)

摘要 本文主要介紹了簡單工廠模式&#xff0c;包括其定義、結構、實現方式、適用場景、實戰示例以及思考。簡單工廠模式是一種創建型設計模式&#xff0c;通過工廠類根據參數決定創建哪一種產品類的實例&#xff0c;封裝了對象創建的細節&#xff0c;使客戶端無需關心具體類的…

抽象工廠模式與策略模式結合使用小案例

目錄 1.前言1.示例說明1.1定義通用接口1.2 定義抽象工廠1.3 支付寶實現1.4 微信實現1.5 客戶端使用代碼&#xff08;組合使用&#xff09;1.6 示例結果輸出1.7 總結 1.前言 上一篇章就通過簡單的案例來了解抽象工廠模式和策略模式的使用&#xff0c;現在就用個支付場景的小案例…

通過WiFi無線連接小米手機攝像頭到電腦的方法

通過WiFi無線連接小米手機攝像頭到電腦的方法 以下是基于Scrcpy和DroidCam兩種工具的無線連接方案&#xff0c;需提前完成開發者模式與USB調試的開啟&#xff08;參考原教程步驟&#xff09;&#xff1a; 方法一&#xff1a;Scrcpy無線投屏&#xff08;無需手機端安裝&#xf…

2025軟件供應鏈安全最佳實踐︱證券DevSecOps下供應鏈與開源治理實踐

項目背景&#xff1a;近年來&#xff0c;云計算、AI人工智能、大數據等信息技術的不斷發展、各行各業的信息電子化的步伐不斷加快、信息化的水平不斷提高&#xff0c;網絡安全的風險不斷累積&#xff0c;金融證券行業面臨著越來越多的威脅挑戰。特別是近年以來&#xff0c;開源…

Java高級 | 【實驗二】Springboot 控制器類+相關注解知識

隸屬文章&#xff1a; Java高級 | &#xff08;二十二&#xff09;Java常用類庫-CSDN博客 系列文章&#xff1a; Java高級 | 【實驗一】Spring Boot安裝及測試 最新-CSDN博客 目錄 一、MVC模式 二、SpringBoot基礎——控制層Controller詳解 &#xff08;一&#xff09;主要工…

MySQL 事務深度解析:面試核心知識點與實戰

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 Java 中 MySQL 事務深度解析&#xff1a;面試…

【趣味Html】第11課:動態閃爍發光粒子五角星

打造炫酷的動態閃爍發光粒子五角星效果 前言 在現代Web開發中&#xff0c;視覺效果的重要性不言而喻。今天我們將深入探討如何使用HTML5 Canvas和JavaScript創建一個令人驚艷的動態閃爍發光粒子五角星效果。這個項目不僅展示了Canvas的強大功能&#xff0c;還涉及了粒子系統、…

6.RV1126-OPENCV 形態學基礎膨脹及腐蝕

一.膨脹 1.膨脹原理 膨脹的本質就是通過微積分的轉換&#xff0c;將圖像A和圖形B進行卷積操作合并成一個AB圖像。核就是指任意的形狀或者大小的圖形B。例如下圖&#xff0c;將核(也就是圖形B)通過微積分卷積&#xff0c;和圖像A合并成一個圖像AB。 2.特點 圖像就會更加明亮 …

機器學習實戰37-基于情感字典和機器學習的股市輿情分析可視化系統

文章目錄 一、項目背景數字時代情感分析情況二、項目流程1.數據采集與預處理2.復合情感分析模型構建3.輿情分析可視化:三、機器學習算法原理1.支持向量機基礎2.核函數與高維映射3.情感分類特征融合4.模型訓練與優化四、實現代碼五、系統特點與優勢1.復合情感分析模型2.多維度可…

STM32F407VET6學習筆記9:編譯輸出固定大小.bin文件

今日學習如何輸出固定大小的.bin編譯文件 目錄 Keil_V5 fromelf.exe 軟件目錄&#xff1a; 魔棒添加命令輸出bin文件&#xff1a; 輸出固定大小的bin文件&#xff1a; 計算bin文件大小&#xff1a; 安裝 SRecord 工具集&#xff1a; 使用SRecord&#xff1a; 參考文章&#…

【Web應用】若依框架:基礎篇14 源碼閱讀-后端代碼分析

文章目錄 ?前言?一、課程講解?總結 標題詳情作者JosieBook頭銜CSDN博客專家資格、阿里云社區專家博主、軟件設計工程師博客內容開源、框架、軟件工程、全棧&#xff08;,NET/Java/Python/C&#xff09;、數據庫、操作系統、大數據、人工智能、工控、網絡、程序人生口號成為你…