C++ 23版的最新特性
C++ 23 是 C++ 编程语言的最新标准版本,于 2023 年正式发布,带来了诸多新特性与改进,以下是一些主要内容:
1.语言特性
1.显式对象参数(Deducing this):显式对象参数(Deducing this)允许在非静态成员函数中显式指定对象参数。在以往的 C++ 版本中,this指针是隐式传递的,而 C++ 23 提供了一种更明确的方式来处理对象参数,这在一些复杂的编程场景和元编程场景下非常有用。
class MyClass {
public:void myFunction(MyClass* this, int arg) {// 函数实现}
};
在这个例子中,myFunction成员函数显式地指定了对象参数MyClass* this。这种写法使得函数调用的对象关系更加明确。
2.多维下标运算符重载:方便处理多维数组,让多维数组的访问和操作更加直观自然。比如
int arr[2][3][4];
arr[1][2][3] = 42; // 传统方式访问多维数组元素
// C++23 中可以这样重载下标运算符
class MyArray {
public:int& operator()(int i, int j, int k) {// 返回对应元素的引用return data[i][j][k];}
private:int data[2][3][4];
};
MyArray myArr;
myArr(1, 2, 3) = 42; // 通过重载的下标运算符访问和修改元素
3.静态运算符函数:引入静态operator(),使得静态成员函数可以像普通运算符一样被调用,增强了代码的灵活性和可读性。
class MathUtils {
public:static int operator()(int a, int b) {return a + b;}
};
int result = MathUtils()(5, 3); // 调用静态 operator() 实现加法运算
4. if consteval和if not consteval:用于在编译时进行条件判断并执行常量评估的语句,可用于优化代码和实现一些编译时的计算逻辑。
consteval int factorial(int n) {if (n == 0) return 1;else return n * factorial(n - 1);
}constexpr int result1 = factorial(5); // 编译时计算阶乘int runtime_value = 4;
int result2 = 0;
if not consteval {result2 = factorial(runtime_value); // 运行时计算阶乘
}
5.扩展的浮点类型:新增了std::float{16|32|64|128}_t和std::bfloat16_t等可选的扩展浮点类型,为数值计算提供了更多的精度选择。
std::float32_t myFloat32 = 3.14f;
std::float64_t myFloat64 = 3.14159265358979323846;
std::float128_t myFloat128 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
二、标准库特性
1.<expected>头文件与std::expected类型:用于处理函数可能返回的预期值和错误,将成功和失败的结果封装在单一的返回类型中,增强了错误处理的可读性和可维护性。例如,在文件读取操作中。
#include <expected>
#include <fstream>
#include <iostream>std::expected<std::string, std::string> readFile(const std::string& filename) {std::ifstream file(filename);if (file.is_open()) {std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());file.close();return content;} else {return std::unexpected("Error opening file: " + filename);}
}int main() {auto result = readFile("test.txt");if (result.has_value()) {std::cout << "File content: " << result.value() << std::endl;} else {std::cerr << "Error: " << result.error() << std::endl;}return 0;
}
2.<generator>头文件与std::generator:用于创建同步协程生成器,方便生成一系列的值,简化了异步编程中的数据生成逻辑。
#include <generator>
#include <iostream>std::generator<int> generateNumbers() {for (int i = 0; i < 5; ++i) {co_yield i;}
}int main() {auto gen = generateNumbers();for (auto num : gen) {std::cout << num << " ";}std::cout << std::endl;return 0;
}
3. 范围库的增强:新增了多个范围适配器和约束范围算法,如views::adjacent、views::adjacent_transform、ranges::starts_with、ranges::ends_with等,使对数据序列的操作更加丰富和灵活.
#include <iostream>
#include <string>int main() {std::string str = "Hello, World!";bool contains_world = str.contains("World");std::cout << "Contains 'World'? " << (contains_world? "Yes" : "No") << std::endl;std::string_view str_view = "This is a test";bool contains_test = str_view.contains("test");std::cout << "Contains 'test'? " << (contains_test? "Yes" : "No") << std::endl;return 0;
}
4.新的字符串处理方法:如std::basic_string::contains和std::basic_string_view::contains,方便判断字符串中是否包含特定的子串。
#include <iostream>
#include <string>int main() {std::string str = "Hello, World!";bool contains_world = str.contains("World");std::cout << "Contains 'World'? " << (contains_world? "Yes" : "No") << std::endl;std::string_view str_view = "This is a test";bool contains_test = str_view.contains("test");std::cout << "Contains 'test'? " << (contains_test? "Yes" : "No") << std::endl;return 0;
}
三、其他方面
1.模块系统的改进:进一步优化了模块的加载和编译性能,新的模块导入语法使模块间依赖关系更明确,降低了耦合度,有助于提高大型项目的开发效率和代码的可维护性,例如在游戏开发项目中可更好地划分和封装不同功能模块.
2.增强的概念(Concepts):对概念的语法进行了简化和改进,使概念定义更清晰易懂,能更精确地约束模板参数,避免类型不匹配错误,在模板元编程中的应用也得到增强,提高了代码的灵活性和可复用性.
3.预处理指令的扩展:新增了#elifdef、#elifndef、#warning等预处理指令,提高了条件编译的清晰度和灵活性.
#ifdef _WIN32
// 包含Windows平台相关的头文件
#include <windows.h>
#elifdef __APPLE__
// 包含苹果平台相关的头文件
#include <CoreFoundation/CoreFoundation.h>
#elifdef __linux__
// 包含Linux平台相关的头文件
#include <stdio.h>
#endif
4.UTF-8 源文件编码:规定 UTF-8 为可移植的源文件编码,确保不同平台上字符表示的一致性.
#include <iostream>
#include <string>
void setMenuItemTitle(std::string title) {std::cout << "设置菜单标题为: " << title << std::endl;
}
int main() {std::string frenchTitle = "Ouvrir";// 法语:打开std::string germanTitle = "Öffnen";// 德语:打开std::string chineseTitle = "打开";setMenuItemTitle(frenchTitle);setMenuItemTitle(germanTitle);setMenuItemTitle(chineseTitle);return 0;
}
在这个例子中,无论是法语、德语还是中文的字符串,都可以在 UTF - 8 编码的源文件中正确地表示和处理。这使得程序能够更好地适应全球化的需求,并且在不同的操作系统和终端设备上,只要它们正确地支持 UTF - 8 编码,就能够正确地显示这些文本信息。
相关文章:
C++ 23版的最新特性
C 23 是 C 编程语言的最新标准版本,于 2023 年正式发布,带来了诸多新特性与改进,以下是一些主要内容: 1.语言特性 1.显式对象参数(Deducing this):显式对象参数(Deducing this&…...
什么是 Memory-bound stalls,以及如何优化
Memory-bound stalls 是指在计算机系统中,程序的性能受到内存访问速度的限制,导致处理器无法高效执行指令。这种情况通常发生在 CPU 需要等待数据从内存中加载时,而不是在执行计算或处理指令时。 Memory-bound stalls 的成因 访问延迟&…...
机器学习 | 非线性回归拟合数据时的离群值检测
非线性回归是一种用于模拟变量之间复杂关系的强大工具。然而,离群值的存在可能会显着扭曲结果,导致参数估计不准确和预测不可靠。因此,检测离群值对于稳健的非线性回归分析至关重要。本文深入研究了在非线性回归中识别离群值的方法和技术&…...
使用elasticsearch-head插件修改elasticsearch数据
1、先使用elasticsearch-head插件基本查询功能找到要修改的数据 2、切换到复合查询界面 url: http://es的ip地址:端口号/索引名称/文档类型(没特殊设置过就是_doc)/文档id/ 例子:http://127.0.0.1:9200/tab_inout_record/_doc/84…...
202412月最新植物大战僵尸杂交版【V3.0.1】更新内容与下载
以下是对UI优化和新内容添加的摘要: UI优化摘要: 主界面重做:对游戏的主界面进行全面的设计更新,提升用户体验。商店重做:对游戏内的商店界面进行重新设计,以改善玩家的购物体验。选卡界面增加图鉴功能&a…...
游戏渠道假量解决方案
某推广公司在推广过程中被查出“短期内点击量激增”“存在同一地址多次访问”“已注册用户重复注册”等数据作弊行为,法院判罚退还服务费200余万元,并赔偿违约金约350万元。 某公司为提升其游戏在应用商店榜单排名,委托某网络公司进行下载、注…...
Java系统对接企业微信审批项目流程
若依做的一个系统需求需要对接企业微信的人员去审核订单 回款之类,以下是详细步骤. 1.首先登入企业微信管理后台: 企业微信 2.找到应用管理 3.自建一个应用 4.这些数据都可以拿到 5.配置可信Ip 6.进入有两种方法让你去配置 ,第一种用公司的…...
基于Springboot人口老龄化社区服务与管理平台【附源码】
基于Springboot人口老龄化社区服务与管理平台 效果如下: 系统登陆页面 系统主页面 社区信息页面 社区文件页面 活动报名页面 走访任务管理页面 社区资讯页面 老人信息管理页面 研究背景 随着社会老龄化的加剧,老年人口比例逐渐增加,对老年…...
Dot Foods EDI 需求分析及对接流程
Dot Foods 是一家美国领先的食品和非食品产品的中间批发分销商,主要为食品服务、零售和分销行业的客户提供服务,是北美大型食品中间分销商之一。Dot Foods (以下简称 Dot)的业务模式是通过整合多个供应商的产品,为客户…...
代码随想录day24 | leetcode 93.复原IP地址 90.子集 90.子集II
93.复原IP地址 Java class Solution {List<String> result new ArrayList<String>();StringBuilder stringBuilder new StringBuilder();public List<String> restoreIpAddresses(String s) {backtracking(s, 0, 0);return result;}// number表示stringb…...
探索国产数字隔离器——测试与应用
国产数字隔离器已成为现代电子产品中的关键部件,以增强的性能和可靠性取代了传统的光耦合器。这些隔离器广泛应用于医疗设备、汽车电子、工业自动化和其他需要强大信号隔离的领域。准确测试这些设备是确保其质量和性能的基本步骤。 如何测试数字隔离器 测试数字隔离…...
IDEA无法打开插件市场的解决
1.版本 我的IDEA版本号为2020.1.4 大家可以从IDEA的help->about进行版本号的查看 2.解决 我们直接到jetbrains官网搜索你想要下载的插件 直接下载即可自动导入...
以腾讯混元模型为例,在管理平台上集成一个智能助手
背景 前几天,公司的同事们一起吃了个饭,餐桌上大家聊到大模型的落地场景。我个人在去年已经利用百度千帆平台写过案例,并发过博客(传送门👉:利用文心千帆打造一个属于自己的小师爷),…...
15.初识接口1 C#
这是一个用于实验接口的代码 适合初认识接口的人 【CSDN开头介绍】(文心一言AI生成) 在C#编程世界中,接口(Interface)扮演着至关重要的角色,它定义了一组方法,但不提供这些方法的实现。它要求所…...
探索 Python编程 调试案例:计算小程序中修复偶数的bug
在 学习Python 编程的过程里,会遇到各种各样的bug。而修复bug调试代码就像是一场充满挑战的侦探游戏。每一个隐藏的 bug 都是谜题,等待开发者去揭开真相,让程序可以顺利运行。今天,让我们通过一个实际案例,深入探索 Py…...
【Unity/HFSM】使用UnityHFSM实现输入缓冲(预输入)和打断机制
文章目录 前言预输入Animancer的InputBuffer:在UnityHFSM中实现InputBuffer: 打断机制 前言 参考Animancer在状态机中的InputBuffer,在UnityHFSM中实现类似的InputBuffer机制,同时扩展一个状态打断机制 插件介绍: A…...
Unity 圆形循环复用滚动列表
一.在上一篇垂直循环复用滚动列表的基础上,扩展延申了圆形循环复用滚动列表。实现此效果需要导入垂直循环复用滚动列表里面的类。 1.基础类 using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using …...
聚水潭数据无缝集成到金蝶云星空的实现方案
聚水潭数据集成到金蝶云星空:聚水潭调拨对接金蝶直接调拨ok 在企业信息化管理中,数据的高效流动和准确对接是实现业务流程顺畅运行的关键。本文将分享一个具体的系统对接集成案例——如何通过轻易云数据集成平台,将聚水潭的数据无缝集成到金…...
虚拟机断网没有网络,需清理内存,删除后再重启
进入NetworkManager可能没权限,设置权限777 to...
[c++11(二)]Lambda表达式和Function包装器及bind函数
1.前言 Lambda表达式着重解决的是在某种场景下使用仿函数困难的问题,而function着重解决的是函数指针的问题,它能够将其简单化。 本章重点: 本章将着重讲解lambda表达式的规则和使用场景,以及function的使用场景及bind函数的相关使…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
