C++23标准库模块

C++二十三点全面总结 文章导读: 一、进制 二、整数定义,赋值,初始化 三、标识符原则 四、13种基本数据类型 五、运算符 六、 字面常量 (123) 符号常量(const修饰的变量) 七、隐式类型转换 八、分支 九、循环 十、数组 十一、指针 十二、多文件 十三、函数 十四、全局变量、局部变量、static 十五、结构体 十六、堆内存 十七、顺序表vector 十八、链表 十九、库函数 二十、文件操作相关 二十一、B... 阅读详情

一、C++23 标准库引入了两个命名模块:std 和 std.compat:

  • std 导出 C++ 标准库命名空间 std 中定义的声明和名称,例如 std::vector。 它还会导出 C 包装器标头的内容,例如 <cstdio> 和 <cstdlib>,提供类似 std::printf() 函数的内容。 不会导出全局命名空间(如 ::printf())中定义的 C 函数。 这可改善包含 <cstdio> 这样的 C 包装器标头的同时也会包含像 stdio.h 这样的 C 头文件的情况,因为这会引入 C 全局命名空间版本。 如果导入 std,则这不是问题。
  • std.compat 导出 std 中的所有内容,并添加 C 运行时全局命名空间,例如 ::printf、::fopen、::size_t、::strlen 等。 使用 std.compat 模块可以更轻松地使用引用全局命名空间中的许多 C 运行时函数/类型的代码库。

不要混合和匹配导入标头单元和命名模块。 例如,不要让 import <vector>; 和 import std; 在同一文件中。

不要混合和匹配导入 C++ 标准库头文件和命名模块 std 或 std.compat。 例如,不要让 #include <vector> 和 import std; 在同一文件中。 但是,可以在同一文件中包括 C 标头和导入命名模块。 例如,可以让 import std; 和 #include <math.h> 在同一文件中。 只是不要包含 C++ 标准库版本 <cmath>。

无需防备多次导入一个模块。 也就是说,模块中不需要 #ifndef 样式的标头防护。 编译器知道它是否已导入命名模块,并忽略重复尝试执行此操作。

如果需要使用 assert() 宏,则 #include <assert.h>。

如果需要使用 errno 宏,则 #include <errno.h>。 由于命名模块不公开宏,因此如果需要从 <math.h> 中检查错误,这是解决方法。

宏(如 NAN、INFINITY 和 INT_MIN )由可以包括的 <limits.h> 定义。 但是,如果你 import std;,则可以使用 numeric_limits<double>::quiet_NaN() 和 numeric_limits<double>::infinity(),而不是 NAN、INFINITY 和 std::numeric_limits<int>::min(),而不是 INT_MIN。

二、新的特性

import std;
struct rect
{
    int len{};
    constexpr int area(this rect self) noexcept {return self.len * self.len;}
};
struct plus
{
    // P1169 is likely not in, otherwise we can make this static
    constexpr auto operator[](this plus, auto&&... args) noexcept
    {
        return (std::forward<decltype(args)>(args) + ...);
    }
};
constexpr plus Plus{};

int main()
{
    constexpr rect r{.len{4}};
    static_assert(r.area() == 16);
    static_assert(Plus[2, 3, 4] == 9); // Mathematica-like syntax

    std::println("Rectangle with {} side length.", r);
}

1. Multidimensional Arrays(P2128)
这个特性用于访问多维数组。以前,C++的operator[]只支持访问单个下标,无法访问多维数组。
C++23终于可以通过m[1,2]这种方式来访问多维数组了。
2.Formatted Output(P2093)
该提案指的是std::print(),之前已经提到过,这里再简单说明一下。
3.std::byteswap(P1272R4)
位于<bit>,顾名思义,是关于位操作的。该特性能够逆转整型的字节序,常用于在数据传输过程中处理不同系统使用不同字节序(大端小端)的情况。
4.特性二十五:std::mdspan(P0009r18)
好的,下面是一个简单的例子,展示了如何使用std::mdspan来创建和操作多维数组

建立在C++20协程基础设施上需要两个高级的库,一个叫
std::generator,这个已经包含在 C++23中;另一个叫task,它被包含在senders中,C++26才会提供。

三、模块的命名

1、主分区模块生成的ifc文件名必须为 模块名.ifc 

如 math.ixx文件如下,生成的ifc文件名必须是 math.ifc 否则VS2026无法找到模块。

// ===== math.ixx (主模块接口) =====
export module math;

// 导出公共分区
export import :algebra;
export import :geometry;

// 导入内部实现分区(不导出)
import :internal_utils;

2、分区模块生成的ifc文件名必须为 模块名-分区名.ifc 

如math_algebra.ixx的分区名为algebra ,生成的ifc文件名必须是 math-algebra.ifc 否则VS2026无法找到模块。

module;

#define DLL_API _declspec(dllexport)

// ===== math_algebra.ixx (导出分区) =====
export module math:algebra;

export int DLL_API add(int a, int b) { return a + b; }
export int DLL_API multiply(int a, int b) { return a * b; }

C++23 C++23 是 C++ 编程语言的下一个主要版本,预计于2023年发布。这个版本引入了多项新的语言特性和标准库增强,旨在提升语言的功能和开发效率。:C++23 中的 Lambda 表达式支持 Attributes,并且可以省略括号。此外,还引入了 P2036 提出的特性,改变了 trailing return types 的 Name Lookup 规则。:C++23 将推进对标准库模块的支持,预计编译速度将提升10倍。:C++23 引入了模块化编程,这将有助于提高代码的组织性和可维护性。 阅读详情

相关推荐

C++20模块化实践:从‘import <iostream>’编译错误到标准库模块的平滑迁移

本文详细解析了C++20模块化实践中常见的`import <iostream>`编译错误及其解决方案,包括编译器版本检查、编译选项设置以及标准库模块的预编译步骤。通过实战案例展示了从传统头文件到标准库模块的平滑迁移过程,并对比了GCC、Clang和MSVC三大编译器的模块支持差异。文章还探讨了模块化带来的性能提升与潜在陷阱,并前瞻了C++23的模块改进特性。

weixin_29230901的博客 229

全网最全最详细的C++23 标准详解:核心语言改进与新特性

C++23 标准引入了多项新的语言特性和标准库增强,进一步提升了语言的功能和开发效率。这篇文章深入解析了这些新特性,通过丰富的代码示例和详细的解析,本文旨在帮助开发者快速掌握C++23的新特性,提升代码的可读性和性能,为实际项目开发提供有力支持。无论是新手还是资深开发者,都能从中获取有价值的编程技巧和优化方案。

iShare_Carlos的博客 8772

Android USB(type-c)耳机调试分析(十)

简介:优快云博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!】🚀】🚀人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.​更多原创,欢迎关注:Android系统攻城狮​1.前言本篇目的:理解Android USB(type-c)耳机调试分析。

Android系统攻城狮 3998

C++23新特性个人总结

本文主要是比较粗略地介绍了c++23新特性,已经对语法、关键字、宏、属性等分类。如有问题,欢迎指出。

我的博客 5026

【DeepSeek+Office/WPS】智能办公新时代的全新利器

DeepSeek是一家专注于通用人工智能技术研发的中国科技公司,其核心产品DeepSeek-R1是一款开源的推理大模型,专注于复杂任务的高效处理,支持智能对话、文本生成、语义理解、计算推理、代码生成与补全等多种应用场景。作为国产、免费、开源且强大的AI平台,DeepSeek不仅致力于为终端用户提供高质量的智能服务,还为开发者提供了一整套完善的技术解决方案,帮助他们快速构建和部署自己的智能应用。

2303_77200324的博客 2791

激光雷达-IMU标定工具lidar_imu_calib保姆级教程(VLP-16实测)

本文提供激光雷达与IMU联合标定的详细实战教程,重点解析lidar_imu_calib工具在VLP-16上的应用。从环境部署、数据采集技巧到参数配置与结果验证,手把手指导完成标定全流程,并详解如何在LIO-SAM等SLAM系统中应用标定结果,确保传感器融合精度。

food6的博客 475

C++ 23将引入标准库模块支持,编译速度提升10倍

点击蓝字关注我们虽然模块是 C++ 20 的主要卖点,但与 C++ 20 不同的是,C++ 23 的标准库也将实现模块化。从标准库开始,模块有望改善编译速度和 C++ 开发者组织代码的方式。C++ 是丹麦计算机科学家 Bjarne Stroustrup 创建的编程语言,由 ISO 进行标准化。最新的标准版本于 2020 年 12 月由 ISO 批准并发布为 ISO/IEC...

轻松学C语言 834

在 CentOS Stream 10 上搭建 Kubernetes 集群并支持开发调试与日志查看

搭建 Kubernetes 集群的每个步骤详细的文档。

灵犀物润 1644

C++ 23 将引入标准库模块支持,编译速度提升 10 倍

注:如果这个问题解决,就可以解决长期以来,C++库开源和引入的最大的痛点问题了。不仅仅是编译速度的提升。虽然模块是 C++ 20 的主要卖点,但与 C++ 20 不同的是,C++ 23 的标准库也将实现模块化。从标准库开始,模块有望改善编译速度和 C++ 开发者组织代码的方式。 C++ 是丹麦计算机科学家 Bjarne Stroustrup 创建的编程语言,由 ISO 进行标准化。最新的标准版本于 2020 年 12 月由 ISO 批准并发布为 ISO/IEC 14882:2020(我们通常称之为 C++

Salted fish in hand, I have the world. 1249

告别混乱接线!用EPLAN 3D布局图,手把手教你搞定电气柜的3D建模与自动布线

本文详细介绍了如何使用EPLAN 3D布局图进行电气柜的3D建模与自动布线,帮助工程师告别混乱接线。从项目准备、基础结构建模到智能设备布局与逻辑定义,再到高级布线技术与问题排查,提供了一套完整的实战指南。通过EPLAN的3D功能,显著提升设计效率与系统可靠性。

weixin_30680385的博客 341

华为云Stack 8.X 流量模型分析(一)

​ 当内部需要提供对外服务时(如对外发布Web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。​ 内部地址要访问公网上的服务时(如Web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。

Ciyaso的博客 3245

clang、C++23标准库模块基本使用

4. 安装好软件包 libc++ 之后,系统目录 /usr/share/libc++/v1/ 之下就会有一个文件: std.cppm。3. 必须同时把clang 、LLVM 、 libc++ 、 libc++abi这四个软件包同时安装好!1. 已经知道clang和LLVM的版本大于18的话,就支持C++23标准的新特性:标准库模块啦!5. 首先使用clang把标准库模块编译好,在当前工程目录下生成 std.pcm 文件。2. 操作系统是Manjaro。

itmrlp的专栏 1554

基于STM32设计的智能厨房环境监测报警系统_426

随着天然气、液化石油气等可燃性气体在家庭中的广泛应用,燃气泄漏所引发的安全问题日益突出。针对传统家用可燃气体报警器功能单一、信息获取受限以及缺乏远程监测能力等不足,设计了一种基于STM32单片机的家用可燃气体报警器系统。

762

从C++23到C++27的跨越,模块化标准库设计背后不为人知的决策逻辑

揭秘C++27模块化标准库设计决策,解决大型项目编译依赖难题。适用于高性能系统开发,采用模块接口分离与按需导入机制,显著提升构建效率与代码可维护性。2025全球C++及系统软件技术大会:C++27模块化标准库的设计理念深度解析,值得收藏。

ProceChat的博客 824

SimpleITK使用——1. 进行Resample/Resize操作

文章目录1. 变换到一个新的spacing1.1 使用Resample()的方法1.1.1 完整代码1.1.2 转换前后图像1.2 使用ResampleImageFilter()的方法2. 已知原图和变换后目标图像的大小2.1 代码2.2 转换后图像3. 相关内容说明3.0 体素和spacing3.1 Resample() 函数说明3.2 itk::simple::ResampleImageFilter函数说明 1. 变换到一个新的spacing 1.1 使用Resample()的方法 1.1.1

啷个哩个啷 8081

基于Simulink与MATLAB的七轴OpenArm机械臂逆运动学仿真与轨迹规划完整指南

本文详细介绍了七自由度OpenArm机械臂在MATLAB/Simulink环境下的运动学仿真与轨迹规划实现方法。首先建立了机械臂的DH参数模型,验证了正运动学计算;随后提出了两种逆运动学求解算法(数值迭代法和臂型角参数化解析法)的MATLAB实现方案;最后在Simulink中搭建了完整的轨迹规划与控制系统。研究解决了七自由度冗余机械臂特有的多解性、奇异性和关节限位约束等核心问题,为OpenArm机械臂的运动控制提供了完整的技术方案和可运行代码实现。

AI的内部世界的博客 684

Xmake 在 Windows 上使用 MinGW GCC 编译 C++23 标准库模块的路径问题解析

Xmake 在 Windows 上使用 MinGW GCC 编译 C++23 标准库模块的路径问题解析 【免费下载链接】xmake ???? 一个基于 Lua 的轻量级跨平台构建工具 项目地址: https://gitcode.com/...

gitblog_01414的博客 305

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

攻克C++23模块编译难题:Xmake构建系统深度解决方案

你是否在C++23模块开发中遭遇过这些痛点?GCC版本兼容性混乱、模块接口单元(BMI)编译失败、标准库模块导入错误、ABI不兼容导致的链接崩溃?本文将系统剖析Xmake构建系统如何针对性解决这些问题,提供从环境配置到高级优化的全流程解决方案,让C++23模块真正落地生产环境。 读完本文你将掌握: - GCC 15+环境下C++23模块的正确配置方法 - Xmake模块编译的内部工作原理与关键流...

gitblog_01429的博客 434

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++23目前已处于计划阶段

C++之父在刚刚落幕的2020 全球C++及系统软件技术大会上提到,C++23已经有一个初步的计划了,目前涉及的主要特性如下: 最高优先级的 支持协程(coroutine) 模块化标准库 执行器(Executors) 网络库(个人认为可能是对异步io的支持) 已经取得一些进展的: 反射 模式匹配 契约 其他 C++之父的PPT如下所示: ...

哦,原来你也在这里。 2744

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C++ 20 准备发布,C++ 23 提上议程

根据 Reddit C++ 版块上的信息,C++ 20 已经正式通过委员会草案,这意味着 C++ 20 可以准备发布。 “在近期 ISO C++ 委员会会议上,我们完成了 C++ 20 委员会草案,并投票决定将国际标准草案(DIS,Draft International Standard)发送出去,以进行最终批准和发布”,帖子介绍:“在程序上,DIS 可能会被拒绝,但是由于我们的程序和过程,...

过客2019 1243

C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)

还有,在前面章节中提到过,导入合适的模块,比如:std或std.compat,不会使任何定义在模块中的C风格的宏对导入的代码可用。在使用C标准库中的C风格的宏时要记住,这特别重要。既然命名的std与std.compat模块不会使assert()宏对于导入代码可用,既然<cassert>是一个C标准库头文件,因此不保证可导入,必须使用#include <cassert>来访问assert()。注意:直到c++23,<name.h>的使用C标准库头文件是过时的,从c++23开始,它们的使用不再过时,但不鼓励。

weixin_71738303的博客 948

十年来影响最大的C++ 20准备发布,C++ 23提上议程

关注、星标公众号,不错过精彩内容整理:黄工参考:开源中国来源地址:https://www.reddit.com/r/cpp/comments/f47x4o/202002_prague_i...

strongerHuang 3712

c++23如何使用vs设置

然后我们就可以开始快乐的写import std;和std::println/std::print了(注意,要vs2026才行,如果是vs2022用户要体验需要下载vs2026)3.点开 c/c++ -> 所有选项,搜索"模块" -> 将"扫描源以查找模块依赖关系"和生成"ISO C++23标准库模块"都设为"是"c++23出现了新的输出“hello world!2.在常规将c++语言标准设为/std::c++latest。真是令人耳目一新,那么我们vs用户该如何设置呢?1.点开解决方案的属性。

a_cute_chicken的博客 164

BS::thread_pool模块化编程:C++20模块导入与编译最佳实践

想要在C++20中高效利用BS::thread_pool线程池库吗?本文将为你提供完整的模块化编程指南!BS::thread_pool是一个快速、轻量级、现代且易于使用的C++17/C++20/C++23线程池库,支持作为C++20模块导入,显著提升编译速度和代码组织效率。 ## 为什么选择C++20模块化编程? 🚀 传统的头文件包含方式(`#include "BS_thread_pool.

gitblog_00206的博客 891

HoRain云--C++23新特性:import std全面解析

C++模块化编程演进:从#include到import std 本文系统梳理C++标准库导入方式的变革:1️⃣ 传统#include:文本替换机制导致重复解析、宏污染等问题;2️⃣ C++20 Modules:引入二进制接口(.ifc),解决编译速度与符号泄露问题;3️⃣ C++23 import std:支持单行导入整个STL,但需注意宏(如assert)需单独处理。当前MSVC支持最完善,GCC/Clang逐步跟进。工程建议:新项目优先选用import std,老项目视编译器支持情况选择头单元或PCH优

sinat_57153473的博客 228
上一篇: GdiPlus和gdi函数
下一篇: 离线下载百度PaddlePaddle框架和PaddleOCR
eamon100
博客等级 码龄23年 90粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值