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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;、数据库、操作系统、大数据、人工智能、工控、网络、程序人生口号成为你…