C++23 已弃用特性

article/2025/6/19 6:00:58

文章目录

    • 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.hkcw.cn/article/xfsOSETqfV.shtml

相关文章

MySQL事务和索引原理

目录 1. MySQL事务原理 1.1. 事务的基本概念 1.2. 事务隔离的实现机制 1.3. 事务的启动方式 2. 索引的原理 2.1. 索引的作用 2.2. 索引常用模型及适用场景 2.3. InnoDB中的索引结构 2.4. 索引维护 2.5. 覆盖索引 2.6. 联合索引和最左缀原则 2.7. 索引下推 1. MySQL事…

第十一章 Java基础-继承

文章目录 1.继承来源2.继承特点3.子类能继承父类中哪些内容1.继承来源 是为了解决代码的重复冗余。

【11408学习记录】考研英语写作提分秘籍:2013真题邀请信精讲+万能模板套用技巧

邀请信 英语写作2013年考研英语&#xff08;一&#xff09;真题小作文题目分析写作思路第一段&#xff1a;第二段&#xff1a;锦囊妙句1&#xff1a;锦囊妙句2&#xff1a;锦囊妙句3&#xff1a;锦囊妙句5&#xff1a;锦囊妙句6&#xff1a;锦囊妙句9&#xff1a;锦囊妙句14&am…

汽车电子笔记之:有关汽车电子AUTOSAR的一些名词解释

目录 1、概述 2、基础概念 2.1、SPEM 2.2、SPEC 2.3、SIP包 2.4、SLP 2.5、HLP 2.6 、AUTOSAR方法论 2.6.1、ECU Extruct 2.6.2、ECU Configuration Values&#xff08;EcuC&#xff09; 2.6.3、Software Component Deion 2.6.4、Measurement and Calibration S…

ASP.NET Core OData 实践——Lesson8增删改查原始类型Property(C#)

大纲 支持的接口主要模型设计控制器设计数据源查询(GET)查询基础类型的原始类型属性查询基类类型Entity的基础类型属性的值查询基类类型Entity的派生类型属性的原始值 查询派生类型Entity的基础类型属性查询派生类型Entity的属性值查询派生类型Entity的派生类型属性的原始值 新…

PCIE之Lane Reserval通道out of oder调换顺序

参考&#xff1a;测量小百科 | PCIe通道位置翻转(Lane Reversal)技术 参考&#xff1a;PCIe学习笔记&#xff08;3&#xff09;链路初始化和训练_pcie 有序集 lane-CSDN博客 案例上都是按照x4或者x8交叉&#xff0c;对于x2也是有办法交叉的&#xff0c;如果4lane的顺序并不是…

LXQt修改开始菜单高亮

开始菜单红色高亮很难看 mkdir -p ~/.local/share/lxqt/palettes/ mkdir -p ~/.local/share/lxqt/themes/ cp /usr/share/lxqt/palettes/Dark ~/.local/share/lxqt/palettes/Darker cp -p /usr/share/lxqt/themes/dark ~/.local/share/lxqt/themes/darker lxqt-panel.qss L…

MIT 6.S081 2020 Lab6 Copy-on-Write Fork for xv6 个人全流程

文章目录 零、写在前面一、Implement copy-on write1.1 说明1.2 实现1.2.1 延迟复制与释放1.2.2 写时复制 零、写在前面 可以阅读下 《xv6 book》 的第五章中断和设备驱动。 问题 在 xv6 中&#xff0c;fork() 系统调用会将父进程的整个用户空间内存复制到子进程中。**如果父…

使用langchain实现RAG(检索增强生成)

概述 本文将从零开始实现一个langchain应用程序, 该应用支持读取pdf文档并embedding编码到Chroma数据库, 当用户提问时, 可以从网络搜索结果和本地向量数据库中收集数据, 传递给第三方LLM大模型, 所有使用到的工具完全免费 将使用如下技术或工具: python3.9langchainChroma …

力扣HOT100之动态规划:139. 单词拆分

这道题之前刷代码随想录的时候已经做过了&#xff0c;但是现在再做一遍还是不会&#xff0c;直接去看视频了。感觉这道题的dp数组很难想到&#xff0c;感觉做不出来也是情有可原吧。这道题目也是一个完全背包问题&#xff0c;字典里的单词就相当于物品&#xff0c;而字符串相当…

趋势直线指标

趋势直线副图和主图指标&#xff0c;旨在通过技术分析工具帮助交易者识别市场趋势和潜在的买卖点。 副图指标&#xff1a;基于KDJ指标的交易策略 1. RSV值计算&#xff1a; - RSV&#xff08;未成熟随机值&#xff09;反映了当前收盘价在过去一段时间内的相对位置。通过计算当前…

应急响应靶机-web3-知攻善防实验室

题目&#xff1a; 1.攻击者的两个IP地址 2.攻击者隐藏用户名称 3.三个攻击者留下的flag 密码&#xff1a;yj123456 解题&#xff1a; 1.攻击者的两个IP地址 一个可能是远程&#xff0c;D盾&#xff0c;404.php,192.168.75.129 找到远程连接相关的英文,1149代表远程连接成功…

前端-不对用户显示

这是steam的商店偏好设置界面&#xff0c;在没有被锁在国区的steam账号会有5个选项&#xff0c;而被锁在国区的账号只有3个选项&#xff0c;这里使用的技术手段仅仅在前端隐藏了这个其他两个按钮。 单击F12打开开发者模式 单击1处&#xff0c;找到这一行代码&#xff0c;可以看…

C++单调栈(递增、递减)

定义 先说单调栈的定义 单调栈&#xff0c;是指栈内数据逐步上升&#xff08;一个比一个大&#xff09;&#xff0c;或逐步下降&#xff08;一个比一个小&#xff09;的栈&#xff0c;其并没有独立的代码&#xff0c;而是在stack的基础上加以限制及条件形成的。 比如&#x…

WIN11+CUDA11.8+VS2019配置BundleFusion

参考&#xff1a; BundleFusion:VS2019 2017 ,CUDA11.5,win11&#xff0c;Realsense D435i离线数据包跑通&#xff0c;环境搭建 - 知乎 Win10VS2017CUDA10.1环境下配置BundleFusion - 知乎 BundleFusionWIN11VS2019 CUDA11.7环境配置-CSDN博客 我的环境&#xff1a;Win 11…

【基于SpringBoot的图书购买系统】Redis中的数据以分页的形式展示:从配置到前后端交互的完整实现

引言 在当今互联网应用开发中&#xff0c;高性能和高并发已经成为系统设计的核心考量因素。Redis作为一款高性能的内存数据库&#xff0c;以其快速的读写速度、丰富的数据结构和灵活的扩展性&#xff0c;成为解决系统缓存、高并发访问等场景的首选技术之一。在图书管理系统中&…

Leetcode LCR 187. 破冰游戏

1.题目基本信息 1.1.题目描述 社团共有 num 位成员参与破冰游戏&#xff0c;编号为 0 ~ num-1。成员们按照编号顺序围绕圆桌而坐。社长抽取一个数字 target&#xff0c;从 0 号成员起开始计数&#xff0c;排在第 target 位的成员离开圆桌&#xff0c;且成员离开后从下一个成员…

任务20:实现各省份平均气温预测

任务描述 知识点&#xff1a; 时间序列分析 重 点&#xff1a; 指数平滑法Python连接数据库&#xff0c;更新数据 内 容&#xff1a; 读取所有省份各月的平均气温数据预测各省份下一年1-12月的气温&#xff0c;并存储到MySQL数据库 任务指导 1. 读取所有省份各月的平…

【Unity】AudioSource超过MaxDistance还是能听见

unity版本&#xff1a;2022.3.51f1c1 将SpatialBlend拉到1即可 或者这里改到0 Hearing audio outside max distance - #11 by wderstine - Questions & Answers - Unity Discussions

VulnStack|红日靶场——红队评估四

信息收集及漏洞利用 扫描跟kali处在同一网段的设备&#xff0c;找出目标IP arp-scan -l 扫描目标端口 nmap -p- -n -O -A -Pn -v -sV 192.168.126.154 3个端口上有web服务&#xff0c;分别对应三个漏洞环境 &#xff1a;2001——Struts2、2002——Tomcat、2003——phpMyAd…