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

【C++ 20进阶(2):属性 Attribute】

【C++ 20进阶(2):属性 Attribute】

原文:https://blog.csdn.net/weixin_44259356/article/details/143663492

引言

本篇文章为系列文章将着重介绍C++20新特性,一是希望可以和大家交流分享,二是也便于自己巩固学习

历史系列:

【C++ 20进阶(1):模块导入 import】

0,介绍

属性是一种编译器厂商用于编译的特定机制(注意区别于java的属性),C++11之前由编译器厂商自行制定,如_attribute_等,C++11之后制定了统一标准,使用[[]]对属性进行支持。如[[nodiscard]](这里很多同学可能没什么概念,正常使用比较少见,通常见于底层如操作系统使用较多,具体可以见我下面的例子)。

1,C++20之前的属性

a. [[nodiscard]]

用于有返回值的函数,添加此属性后,如果代码没有对返回值进行处理,将会编译告警。如:

[[nodiscard]] auto f() // 这里auto为20新增类型推导,后续系列将会介绍
{return 0;
}
int main()
{f(); // 不处理返回值编译器将告警
}

在C++20中还可以这样用

[[nodiscard("必须要处理此函数返回值")]] auto f() // 双引号内可以添加告警原因

b.[[maybe_unused]]

用于禁止编译器在有变量未使用时发出告警,告警通常发生在编译器告警等级设置较高时。如:

auto f(int a, int b) // 未使用a或者b时编译器将告警
{return 0;
}
auto f(int a, [[maybe_unused]] int b) // b变量编译器将不会告警,a任然会告警
{return 0;
}

[[maybe_unused]]还可用于类,结构体,函数等等,后面系列将会进一步介绍。

c.[[noreturn]]

使用此属性意味着函数永远不会返回调用栈的上一级,一般用于异常处理,或者程序终止。如:

[[noreturn]] void f() // 不添加此属性,编译器将会告警
{std::exit(1); // 程序将终止
}

d.[[deprecated]]

添加此属性意味着内容已被弃用,你还可以用,但是不推荐使用,此属性还可添加原因。如:

[[deprecated("性能较差,请尽量避免使用此函数")]] void f(); // 引号内容为原因,使用此函数编译器将会告警,并提示原因。

2,C++20之后的属性

a.[[likely]]/[[unlikely]]

可用于代码优化,告诉编译器什么分支更加可能被执行,或者不太可能被执行,从而提升性能。如:

if (int a{}; a > 0) // 初始化器,C++17后可用,本系列重点讲解C++20,C++20以前感兴趣可以留言
{
}
else if (a == 0) [[likely]] // 此分支将更加可能被执行
{
}
else [[unlikely]] // 此分支将不太可能被执行
{
}

通常现代编译器不加此属性也能预测分支执行概率,从而优化性能,但上述例子如果出现在对性能要求很高的情况下,能更加有效的提升性能。

后续我将继续分享C++20一些新的有趣的知识点,感兴趣可以点个关注或者私聊,谢谢!

相关文章:

【C++ 20进阶(2):属性 Attribute】

【C 20进阶(2):属性 Attribute】 原文:https://blog.csdn.net/weixin_44259356/article/details/143663492 引言 本篇文章为系列文章将着重介绍C20新特性,一是希望可以和大家交流分享,二是也便于自己巩固…...

【系统面试篇】其他相关题目——虚拟内存、局部性原理、分页、分块、页面置换算法

目录 一、相关问题 1. 什么是虚拟内存?为什么需要虚拟内存? (1)内存扩展 (2)内存隔离 (3)物理内存管理 (4)页面交换 (5)内存映…...

力扣617:合并二叉树

给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠&#…...

软件设计师 - 第1章 计算机网络概论

计算机系统硬件基本组成 输入设备:键盘,鼠标输出设备:显示器,打印机...存储器:主存储器,如内存;辅助存储器,如外存运算器:与控制器一同集成在CPU中控制器:与…...

方案丨车险保单OCR:3秒钟完成保单审核

在涉及车辆交易的各种情况下,记录和管理车险保单信息是一项必不可少的任务。然而,面对数量庞大的电子保单,传统的手工录入方式显得尤为低效——它不仅消耗大量时间,而且容易出现错误,这不仅影响了用户的满意度&#xf…...

Jmeter中的监听器(一)

监听器 1--查看结果树 用途 调试测试计划:查看每个请求的详细信息,帮助调试和修正测试计划。分析响应数据:查看服务器返回的响应数据,验证请求是否成功。检查错误:识别和分析请求失败的原因。 配置步骤 添加查看结果…...

C++ 标准库 std::vector 的介绍

std::vector 是 C 标准库中的一个动态数组容器,它提供了多种成员函数来管理其内部存储的元素。以下是一些常用的 std::vector 成员函数的介绍: 构造函数和析构函数 vector(): 默认构造函数。vector(size_type n): 构造一个包含 n 个元素的向量&#xf…...

鸿蒙开发-装饰器@Link问题

正常示例 class Parent {public count: number;constructor( count: number) {this.count count;} } Entry Component struct TestPage {State parent: Parent new Parent( 11)build() {Column() {SubComponent({ parent: this.parent })}.height(100%)} } Component struct…...

CTFhub靶场RCE学习

靶场 eval执行 <?php if (isset($_REQUEST[cmd])) {eval($_REQUEST["cmd"]); } else {highlight_file(__FILE__); } ?> PHP代码显示&#xff0c;要求将命令赋值给cmd然后执行 先查看一下根目录文件 ?cmdsystem("ls");&#xff01;切记最后的分…...

一文3000字从0到1带你进行Mock测试(建议收藏)

​什么是mock&#xff1f; ​mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为&#xff0c;很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock&#xff1f; 之所以使用mock测试&#xff0c;是因…...

数据结构 ——— 链式二叉树的销毁(释放)

目录 链式二叉树示意图 手搓一个链式二叉树 代码实现 示意图 手搓一个链式二叉树 代码演示&#xff1a; // 数据类型 typedef int BTDataType;// 二叉树节点的结构 typedef struct BinaryTreeNode {BTDataType data; //每个节点的数据struct BinaryTreeNode* left; //指向…...

log4j异常堆栈文件输出

目的&#xff1a;log4j异常堆栈关联到traceId一句话中&#xff0c;方便搜索 1、获取堆栈后一起打印 private void logException(Throwable t, ProceedingJoinPoint joinPoint) {if (this.printErrorStackSys) {StringWriter sw new StringWriter();PrintWriter pw new Print…...

在配置环境变量之后使用Maven报错 : mvn : 无法将“mvn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

最近&#xff0c;我在 Windows 系统上安装和配置 Apache Maven 时遇到了一些问题&#xff0c;想在此记录下我的解决历程&#xff0c;希望对遇到类似问题的朋友有所帮助。 问题描述 我下载了 Maven 并按照常规步骤配置了相关的环境变量。然而&#xff0c;在 PowerShell 中输入…...

SpringSecurity源码中核心类

SpringSecurity源码 第一部分 核心类 SecurityBuilderHttpSecurityWebSecuritySecurityFilterChainFilterChainProxy SecurityBuilder是安全构架器&#xff0c;HttpSecurity和WebSecurity都是SecurityBuilder的实现类&#xff0c;HttpSecurity通过build()构建了一个Security…...

【JAVA】使用IDEA创建maven聚合项目

【JAVA】使用IDEA创建maven聚合项目 1.效果图 2.创建父模块项目 2.1删除父模块下面的src目录以及不需要的maven依赖 3创建子模块项目 3.1右击父模块项目选择Module… 3.2创建子模块 3.3删除子模块下不需要的maven依赖 4.子模块创建完成后引入SpringBoot依赖启动项目...

猿创征文|Inscode桌面IDE:打造高效开发新体验

猿创征文&#xff5c;Inscode桌面IDE&#xff1a;打造高效开发新体验 引言 在当今快速发展的软件开发领域&#xff0c;一个高效、易用的集成开发环境&#xff08;IDE&#xff09;是每个开发者必不可少的工具。Inscode 桌面 IDE 作为一款新兴的开发工具&#xff0c;凭借其强大…...

概率论中的PMF、PDF和CDF

在概率论中&#xff0c;PMF&#xff08;概率质量函数&#xff09;、PDF&#xff08;概率密度函数&#xff09;和CDF&#xff08;累积分布函数&#xff09;是描述随机变量分布的三个重要概念。它们分别用于不同类型的随机变量&#xff0c;并帮助我们理解随机事件的概率特性。本文…...

Vue 简单入手

前端工程化&#xff08;Front-end Engineering&#xff09;指的是在前端开发中&#xff0c;通过一系列工具、流程和规范的整合&#xff0c;以提高开发效率、代码质量和可维护性的一种技术和实践方法。其核心目的是使得前端开发变得更高效、可扩展和可维护。 文章目录 一、Vue 项…...

Github配置ssh key原理及操作步骤

文章目录 配置SSH第一步&#xff1a;检查本地主机是否已经存在ssh key第二步&#xff1a;生成ssh key第三步&#xff1a;获取ssh key公钥内容第四步&#xff1a;Github账号上添加公钥第五步&#xff1a;验证是否设置成功验证原理 往github上push项目的时候&#xff0c;如果走ht…...

大循环引起CPU负载过高

一、问题背景 环境&#xff1a;jdk1.8 tomcat7 在一次发布时&#xff0c;cpu出现负载过高&#xff0c;其负载突破200%&#xff0c;并且响应时间也大幅度超时。 二、问题分析 【1】发布前做过压测&#xff0c;并没有发现cpu异常升高的现象&#xff0c;所以其可能与生产环境的请…...

PCIe设备树深度解析:从RK3588实例看Linux内核地址与中断映射(九)

1. PCIe设备树基础概念与RK3588实战背景 第一次接触PCIe设备树配置时&#xff0c;我被那些密密麻麻的十六进制数字和嵌套属性搞得头晕眼花。直到在RK3588平台上实际调试PCIe设备时&#xff0c;才真正理解设备树如何成为连接硬件与操作系统的桥梁。PCIe设备树不同于普通外设的简…...

Qwen3.5-9B效果展示:中英混合输入+代码注释生成高质量输出

Qwen3.5-9B效果展示&#xff1a;中英混合输入代码注释生成高质量输出 1. 模型核心能力概览 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;在多个领域展现出卓越的能力。这个模型特别适合处理复杂的技术任务&#xff0c;尤其是那些需要同时理解自然语言和编程语言的…...

忍者像素绘卷GPU优化部署教程:双显卡加速与显存平衡详解

忍者像素绘卷GPU优化部署教程&#xff1a;双显卡加速与显存平衡详解 1. 认识忍者像素绘卷 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站&#xff0c;专为像素艺术创作而设计。它将16-Bit复古游戏美学与现代AI技术完美结合&#xff0c;为创作者提供了一个独特…...

收藏!从Prompt到Harness,AI工程升级三步搞定大模型应用

本文阐述了AI工程从关注Prompt到Context再到Harness的演进过程。Prompt工程负责明确任务指令&#xff0c;Context工程负责提供准确有效的信息供给&#xff0c;而Harness工程则关注AI在系统中的可靠执行与治理。三者并非替代关系&#xff0c;而是嵌套协作&#xff0c;共同推动AI…...

无需安装jupyter notebook,在快马平台5分钟搭建你的第一个数据分析原型

今天想和大家分享一个快速搭建数据分析原型的经验。作为一个经常需要验证想法的数据分析师&#xff0c;最头疼的就是每次换电脑或重装系统后配置Jupyter Notebook环境的过程。最近发现了一个超省心的解决方案&#xff0c;不用本地安装就能直接开搞数据分析。 为什么选择云端Ju…...

基于YOLO的安全帽佩戴检测系统~Python+模型训练+2026原创+YOLO算法

项目简介 基于 YOLO 的智能安全帽佩戴检测平台&#xff0c;面向施工现场图片识别、检测记录管理与安全宣传信息展示等业务场景。系统后端采用 Flask 搭建 RESTful API 服务&#xff0c;结合数据库进行业务数据持久化存储&#xff0c;并通过 JWT 实现用户身份认证与接口访问控制…...

Modern.js 多环境配置终极指南:开发、测试、预发布与生产环境的完整实践

Modern.js 多环境配置终极指南&#xff1a;开发、测试、预发布与生产环境的完整实践 【免费下载链接】modern.js Modern.js is a web engineering system, including a web framework and a npm package solution. 项目地址: https://gitcode.com/gh_mirrors/mo/modern.js …...

Nunchaku FLUX.1-dev实战:手把手教你用ComfyUI生成惊艳AI图片

Nunchaku FLUX.1-dev实战&#xff1a;手把手教你用ComfyUI生成惊艳AI图片 1. 环境准备与快速部署 1.1 硬件与软件要求 在开始之前&#xff0c;请确保你的系统满足以下基本要求&#xff1a; 显卡&#xff1a;NVIDIA显卡&#xff08;推荐RTX 30/40系列&#xff0c;显存8GB&am…...

抖音批量下载终极指南:一键获取无水印视频与创作者全部作品

抖音批量下载终极指南&#xff1a;一键获取无水印视频与创作者全部作品 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...

高效智能转换方案:B站缓存视频一键处理实战指南

高效智能转换方案&#xff1a;B站缓存视频一键处理实战指南 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 在B站视频频繁下架的当下&#xff0c…...