当前位置: 首页 > news >正文

c++23中的新功能之十八新增的属性

一、c++23新的属性

在前面的分析中说过,各种语言的发展整体思路是一致的,即朝着更加实用、简单和更接近自然语言的方向在前进。c++23中也在不断的完善和增加相关开发的一些属性和预编译处理指令,这样就可以让开发者在开发的过程中对程序进行控制而不必非得等到运行时才能预判到结果。
在c++11后,c++14,c++17,c++20都有新的属性(Java叫注解)的引入,所以c++23也要引入一些,这也算是传统了。
在c++23中,引入了assume属性并且在lambda表达式中也新增了属性的支持。

二、作用和例程

一个生态体系的架构不是一朝一夕完成的。同样,c++标准的完善和迭代也是一个冗长的过程。一个新标准的加入,不管是语言层次还是库层次,一定有一个需求发展的过程。可能在早期这个功能需求并不强烈,而且可能有一些不完善,但随着技术的发展和提出的草案越来越全面,这种功能加入到新标准就会可能性越来越大。这个在c++11到c++23中都有很多例子可以说出来。
今天介绍的这几个新功能就是在这种情况下引入的。
1、lambda表达式新增属性支持
在c++语法中,lambda往往代表着一些普通的语法无法在其中使用,比如早期的模板和auto等。但这些都在后期慢慢补齐了。而属性的出现,同样需要在lambda表达式中有应用的需求:

auto func = [] [[nodiscard]] ()->std::string  { return "123"; };

即使是如此,仍然有一些属性在lambda表达式中的应用还是会受到受制,比如[[noreturn]]。另外,由于宏生成代码的特殊性,新标准对重复属性定义取消了限制的情况:

// 不可以
[[nodiscard, nodiscard]] int get()
{return 0;
}// 可以
[[nodiscard]][[nodiscard]] int get()
{return 0;
}

反正是能支持的尽量支持,有点过分的暂时不支持,以后支持不支持,不好说。

2、assume
这个属性的功能其实在许多平台的编译器的扩展中早就进行了支持,它的意思是如果在编译期某个条件必然成立后就可以停止对整体范围内的错误检查。这句话有点不太顺溜,看下代码就明白了:

double get(double x)
{//必须要做x !=0的判断if (x > 0){return 100.00/x;}
}
double get(double x)
{[[assume(x > 0)]]return 100.00/x;
}

就如上面的代码,一般来说,当进行除法运算时,一定要检查除数是否为0,但是assume确定其大于0后,就不需要再做其进行判断了。这和constexptr if有相似的地方。

三、总结

c++23的新功能基本就要介绍完了,其中一些代码由于无法运行,可能会存在着一些错误。这些大家都可以先明白标准提出的目的。也欢迎大家提出各种批评和意见,大家共同进步。真理越辩越明,技术越讨论就明晰。
等到各大平台的编译器基本支持c++23的主流功能后,这些新功能才有可能应用到实际的工程中去。现在很多公司都在升级c++标准,至少c++17主流的编译器目前都已经进行了支持,所以新的标准不断的在新项目中采用,大家还是有序跟进不要掉队。

相关文章:

c++23中的新功能之十八新增的属性

一、c23新的属性 在前面的分析中说过,各种语言的发展整体思路是一致的,即朝着更加实用、简单和更接近自然语言的方向在前进。c23中也在不断的完善和增加相关开发的一些属性和预编译处理指令,这样就可以让开发者在开发的过程中对程序进行控制…...

动手学深度学习:1.线性回归从0开始实现

动手学深度学习:1.线性回归从0开始实现 1.手动构造数据集2.小批量读取数据集3.初始化模型参数4.定义模型和损失函数5.小批量随机梯度下降更新6.训练完整代码 1.手动构造数据集 根据带有噪声的线性模型构造一个人造数据集,任务是使用这个有限样本的数据集…...

【计算机网络】应用层

应用层协议原理 客户-服务器体系结构: 特点:客户之间不能直接通信;服务器具有周知的,固定的地址,该地址称为IP地址。 配备大量主机的数据中心常被用于创建强大的虚拟服务器;P2P体系结构: 特点&…...

python 深度学习 解决遇到的报错问题9

本篇继python 深度学习 解决遇到的报错问题8-CSDN博客 目录 一、can only concatenate str (not "int") to str 二、cant convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, in…...

能源管理系统为什么选择零代码开发平台?

市面上有很多能源管理系统,但是零代码开发能源管理系统却非常少。那为什么推荐选择零代码开发平台呢?因为很多企业缺少技术人员,但是却仍然需要数字化工具和流程推进业务和项目,解决能源管理技术人员不懂代码的矛盾问题&#xff0…...

【LeetCode】剑指 Offer Ⅱ 第8章:树(12道题) -- Java Version

题库链接:https://leetcode.cn/problem-list/e8X3pBZi/ 类型题目解决方案二叉树的深搜剑指 Offer II 047. 二叉树剪枝递归(深搜):二叉树的后序遍历 (⭐)剑指 Offer II 048. 序列化和反序列化二叉树递归&…...

利用maven的dependency插件将项目依赖从maven仓库中拷贝到一个指定的位置

https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html 利用dependency:copy-dependencies可以将项目的依赖从maven仓库中拷贝到一个指定的位置。 使用默认配置拷贝依赖 如果直接执行mvn dependency:copy-dependencies,是将项目…...

在Flask中实现文件上传七牛云中并下载

在Flask中实现文件上传和七牛云集成 文件上传是Web应用中常见的功能之一,而七牛云则提供了强大的云存储服务,使得文件存储和管理变得更加便捷。在本篇博客中,我们将学习如何在Flask应用中实现文件上传,并将上传的文件保存到七牛云…...

【Linux】centOS7安装配置及Linux的常用命令---超详细

一,centOS 1.1 centOS的概念 CentOS(Community Enterprise Operating System)是一个由社区支持的企业级操作系统,它是以Red Hat Enterprise Linux(RHEL)源代码为基础构建的。CentOS提供了一个稳定、可靠且…...

【ES专题】ElasticSearch搜索进阶

目录 前言阅读导航前置知识特别提醒笔记正文一、分词器详解1.1 基本概念1.2 分词发生的时期1.3 分词器的组成1.3.1 切词器&#xff1a;Tokenizer1.3.2 词项过滤器&#xff1a;Token Filter1.3.3 字符过滤器&#xff1a;Character Filter 1.4 倒排索引的数据结构 <font color…...

【iOS免越狱】利用IOS自动化WebDriverAgent实现自动直播间自动输入

1.目标 由于看直播的时候主播叫我发 666&#xff0c;支持他&#xff0c;我肯定支持他呀&#xff0c;就一直发&#xff0c;可是后来发现太浪费时间了&#xff0c;能不能做一个直播间自动发 666 呢&#xff1f;于是就开始下面的操作。 2.操作环境 iPhone一台 WebDriverAgent …...

Python基础入门例程28-NP28 密码游戏(列表)

最近的博文&#xff1a; Python基础入门例程27-NP27 朋友们的喜好&#xff08;列表&#xff09;-CSDN博客 Python基础入门例程26-NP26 牛牛的反转列表&#xff08;列表&#xff09;-CSDN博客 Python基础入门例程25-NP25 有序的列表&#xff08;列表&#xff09;-CSDN博客 目录…...

乌班图 Linux 系统 Ubuntu 23.10.1 发布更新镜像

Ubuntu 团队在其官网上发布了Ubuntu 23.10.1 版本,这是目前较新的 Ubuntu 23.10(Focal Fossa)操作系统系列的第一个发行版,旨在为社区提供最新的安装媒体。Ubuntu 22.04 LTS(Focal Fossa)操作系统系列于 2022 年 4 月 21 日发布。 Ubuntu 23.10 LTS(长期支持版本)可用…...

Java金字塔、空心金字塔、空心菱形

Java金字塔 public class TestDemo01 {public static void main(String[] args){//第一个for用于每行输出 从i1开始到i<5,总共5行for(int i1;i<5;i){//每行前缀空格&#xff0c;这个for用于表示每行输出*前面的空格//从上面规律可得,每行输出的空格数为总层数&#xff0c…...

前端 | (十四)canvas基本用法 | 尚硅谷前端HTML5教程(html5入门经典)

文章目录 &#x1f4da;canvas基本用法&#x1f407;什么是canvas(画布)&#x1f407;替换内容&#x1f407;canvas标签的两个属性&#x1f407;渲染上下文 &#x1f4da;绘制矩形&#x1f407;绘制矩形&#x1f407;strokeRect时&#xff0c;边框像素渲染问题&#x1f407;添加…...

206.反转链表

206.反转链表 力扣题目链接(opens new window) 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 双双指针法&#xff1a; 创建三个节点 pre(反转时的第一个节点)、cur(当前指向需要反转的节点…...

SpringBoot项目从resources目录读取文件

SpringBoot 从 resources 读取文件 使用 Spring 给我们提供的工具类来进行读取 File file org.springframework.util.ResourceUtils.getFile("classpath:人物模板.docx");可能读取失败&#xff0c;出现如下错误&#xff1a; java.io.FileNotFoundException: clas…...

SQL实现根据时间戳和增量标记IDU获取最新记录和脱IDU标记

需求说明&#xff1a;表中有 id, info, cnt 三个字段&#xff0c;对应的增量表多idu增量标记字段和时间戳字段ctimestamp。增量表中的 id 会有重复&#xff0c;其他字段 info、cnt 会不断更新&#xff0c;idu为增量标记字段&#xff0c;ctimestamp为IDU操作的时间戳。目的时要做…...

京东数据平台:2023年9月京东智能家居行业数据分析

鲸参谋监测的京东平台9月份智能家居市场销售数据已出炉&#xff01; 9月份&#xff0c;智能家居市场销售额有小幅上涨。根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年9月&#xff0c;京东平台智能家居的销量为37万&#xff0c;销售额将近8300万&#xff0c;同比增…...

计算两个时间之间连续的日期(java)

背景介绍 给出两个时间&#xff0c;希望算出两者之间连续的日期&#xff0c;比如时间A:2023-10-01 00:00:00 时间B:2023-11-30 23:59:59,期望得到的连续日期为2023-10-01、2023-10-02、… 2023-11-30 Java版代码示例 import java.time.temporal.ChronoUnit; import java.tim…...

别被TMOS吓到!拆解沁恒CH579蓝牙例程,看事件驱动如何简化你的代码

别被TMOS吓到&#xff01;拆解沁恒CH579蓝牙例程&#xff0c;看事件驱动如何简化你的代码 第一次打开沁恒CH579的蓝牙例程&#xff0c;看到满屏的TMOS_前缀函数和eventID定义&#xff0c;是不是瞬间头皮发麻&#xff1f;作为从51单片机转战蓝牙开发的工程师&#xff0c;我完全理…...

微带贴片天线基础计算

2GHz微带阵列天线&#xff0c;HFSS仿真模型&#xff0c;介质板为FR4&#xff0c;增益4.5dBi&#xff0c;驻波小于1.5。最近在捣鼓2GHz频段的微带阵列天线设计&#xff0c;用HFSS建模仿真时遇到不少有意思的问题。FR4板材这玩意儿看着普通&#xff0c;实际用在天线设计里真得小心…...

终极指南:如何在Chainer中构建强大的循环神经网络(RNN)

终极指南&#xff1a;如何在Chainer中构建强大的循环神经网络(RNN) 【免费下载链接】chainer A flexible framework of neural networks for deep learning 项目地址: https://gitcode.com/gh_mirrors/ch/chainer 想要掌握深度学习中的序列建模吗&#xff1f;Chainer框架…...

vLLM-v0.17.1部署教程:vLLM+NGINX实现SSL/TLS加密API服务

vLLM-v0.17.1部署教程&#xff1a;vLLMNGINX实现SSL/TLS加密API服务 1. vLLM框架简介 vLLM是一个专注于大语言模型(LLM)推理和服务的高性能开源库。它最初由加州大学伯克利分校的天空计算实验室开发&#xff0c;现已发展成为一个由学术界和工业界共同维护的社区项目。 这个框…...

APKMirror:安卓应用安全管理的终极解决方案

APKMirror&#xff1a;安卓应用安全管理的终极解决方案 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror 您是否曾在寻找安卓应用的特定版本时感到无从下手&#xff1f;是否担忧从第三方渠道下载的APK文件可能存在安全隐患&#xff…...

ARM A53上跑通1080P实时EIS防抖?手把手教你优化特征点与透视变换(附代码思路)

ARM A53实战&#xff1a;1080P实时EIS防抖的7个关键优化策略 当行车记录仪的镜头在颠簸路面剧烈晃动&#xff0c;或是运动相机在冲浪时被海浪拍打&#xff0c;画面稳定性的价值就凸显出来。传统光学防抖受限于物理结构&#xff0c;而电子防抖(EIS)通过算法补偿成为嵌入式设备的…...

Android开发避坑指南:RecyclerView最后一行被截断的5种原因及对应解决方案

Android开发避坑指南&#xff1a;RecyclerView最后一行被截断的5种原因及对应解决方案 在Android应用开发中&#xff0c;RecyclerView作为列表展示的核心组件&#xff0c;其灵活性和高性能深受开发者喜爱。然而&#xff0c;在实际项目中&#xff0c;我们经常会遇到一个令人头疼…...

AI算法Excel可视化终极指南:如何用电子表格深度解析人工智能原理

AI算法Excel可视化终极指南&#xff1a;如何用电子表格深度解析人工智能原理 【免费下载链接】ai-by-hand-excel 项目地址: https://gitcode.com/gh_mirrors/ai/ai-by-hand-excel 你是否曾被复杂的AI算法公式和抽象概念困扰&#xff0c;想要找到一种更直观的学习方式&a…...

Phi-4-Reasoning-Vision效果展示:红外图像+可见光图像跨模态推理

Phi-4-Reasoning-Vision效果展示&#xff1a;红外图像可见光图像跨模态推理 1. 多模态推理工具概览 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具&#xff0c;专为双卡RTX 4090环境优化。这个工具最令人印象深刻的是它能够处…...

告别特征点!FAST-LIVO2的‘直接法’融合:如何用原始点云和图像块实现更快的SLAM?

FAST-LIVO2&#xff1a;直接法SLAM的革命性突破与工程实践指南 1. 直接法SLAM的技术演进与核心价值 当波士顿动力的Atlas机器人完成后空翻动作时&#xff0c;其核心定位系统正面临着与人类体操运动员相似的挑战——如何在高速运动中维持对环境的精确感知。这正是FAST-LIVO2这类…...