C++17 主要更新
C++17 主要更新
C++17 是继 C++14 之后的重要标准更新,引入了许多提升开发效率、简化代码和增强性能的特性。以下是 C++17 的主要更新,按类别分类:
1. 语言核心特性
结构化绑定(Structured Bindings)
- 解构元组、结构体或数组,直接绑定到变量:
std::pair<int, std::string> p{42, "hello"}; auto [num, str] = p; // num=42, str="hello"
if
和 switch
初始化语句
- 在条件语句中直接初始化变量:
if (auto it = map.find(key); it != map.end()) {// 使用 it }
内联变量(Inline Variables)
- 解决头文件中全局变量的重复定义问题:
inline int globalVar = 42; // 头文件中定义,无需.cpp文件
折叠表达式(Fold Expressions)
- 简化变参模板的展开:
template<typename... Args> auto sum(Args... args) {return (args + ...); // 等价于 args1 + args2 + ... }
constexpr
增强
- 支持更多编译时计算(如
if
语句、lambda
):constexpr auto factorial(int n) {if (n <= 1) return 1;else return n * factorial(n - 1); }
2. 标准库新增内容
std::optional
- 表示可选值,避免使用裸指针或特殊值(如
-1
):std::optional<int> getResult() {if (success) return 42;else return std::nullopt; }
std::variant
和 std::visit
- 类型安全的联合体(替代
union
):std::variant<int, std::string> v = "hello"; std::visit([](auto&& arg) { std::cout << arg; }, v);
std::string_view
- 非所有权字符串视图,避免不必要的拷贝:
void print(std::string_view sv) {std::cout << sv; // 支持 std::string 和 C 风格字符串 }
并行算法(Parallel Algorithms)
- 标准库算法支持并行执行(需编译器支持):
std::vector<int> data = {...}; std::sort(std::execution::par, data.begin(), data.end());
文件系统库(std::filesystem
)
- 跨平台文件/目录操作:
namespace fs = std::filesystem; fs::path p = "data.txt"; if (fs::exists(p)) std::cout << "File size: " << fs::file_size(p);
3. 其他重要改进
[[nodiscard]]
属性
- 强制检查函数返回值(避免忽略错误):
[[nodiscard]] int calculate(); calculate(); // 编译器警告:未使用返回值
[[maybe_unused]]
属性
- 抑制未使用变量的警告:
void func([[maybe_unused]] int debugParam) {}
类模板参数推导(CTAD)
- 简化模板类的构造函数调用:
std::pair p(42, "hello"); // 自动推导为 std::pair<int, const char*>
std::byte
- 明确表示字节类型(替代
char
/unsigned char
):std::byte buffer[1024];
4. 代码示例:C++17 综合应用
#include <iostream>
#include <optional>
#include <filesystem>
#include <variant>[[nodiscard]] std::optional<int> parseFile(const std::filesystem::path& p) {if (!std::filesystem::exists(p)) return std::nullopt;return 42; // 模拟解析结果
}int main() {auto [num, str] = std::pair(42, "C++17"); // 结构化绑定if (auto result = parseFile("data.txt")) { // if 初始化语句std::cout << "Result: " << *result << "\n";}return 0;
}
5. 兼容性与工具支持
- 编译器最低版本:
- GCC 7+、Clang 5+、MSVC 19.15+(Visual Studio 2017 15.8+)。
- 构建工具:
- CMake 3.8+ 支持 C++17 标准设置:
set(CMAKE_CXX_STANDARD 17)
- CMake 3.8+ 支持 C++17 标准设置:
C++17 显著提升了代码的简洁性和安全性,尤其适合资源管理、模板编程和跨平台开发。如果需要进一步了解某个特性的用法,可以深入探讨! 🚀
相关文章:
C++17 主要更新
C17 主要更新 C17 是继 C14 之后的重要标准更新,引入了许多提升开发效率、简化代码和增强性能的特性。以下是 C17 的主要更新,按类别分类: 1. 语言核心特性 结构化绑定(Structured Bindings) 解构元组、结构体或数组…...
k8s master节点部署
一、环境准备 1.主机准备 192.168.10.100 master.com master 192.168.10.101 node1.com node1 192.168.10.102 node2.com node2 互信 时间同步 关闭防火墙 关闭selinux 2.创建/etc/sysctl.d/k8s.conf,添加如下内容 cat > /etc/sysctl.d/k8s.conf <<EOF net.br…...
YOLO学习笔记 | YOLOv8 全流程训练步骤详解(2025年4月更新)
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 这里写自定义目录标题 一、数据准备1. 数据标注与格式转换2. 配置文件生…...
centos7.9 升级 gcc
本片文章介绍如何升级gcc,centos7.9 仓库默认的gcc版本为:4.8.5 4.8.5-44) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY…...
Linux基本指令
Linux目录结构 Linux的目录结构是一个树形结构。Windows系统可以拥有多个盘符,如C盘、D盘、E盘。而Linux没有盘符这个概念,只有一个根目录/,所有文件都在它下面。如下图所示: Linux路径的描述方式 在Linux系统中,路径之间的层级…...
Google A2A协议,是为了战略性占领标准?
一、导读 2025 年 4 月 9 日,Google 正式发布了 Agent2Agent(A2A)协议。 A2A 协议致力于打破智能体之间的隔阂,让它们能够跨越框架和供应商的限制,以一种标准化、开放的方式进行沟通与协作 截止到现在,代…...
每日一题(小白)暴力娱乐篇29
题目比较简单,主要是判断条件这块,一定要注意在奇数的位置和偶数的位置标记,若奇数位为奇数偶数位为偶数才能计数加一,否则都是跳过。 ①接收数据n ②循环n次,拆解n,每次拆解记录ans ③拆解n为若干次x&a…...
瀚天天成闯港交所上市:业绩波动明显,十分依赖少数客户和供应商
撰稿|张君 来源|贝多财经 近日,瀚天天成电子科技(厦门)股份有限公司(下称“瀚天天成”)递交招股书,报考港交所主板上市。据贝多财经了解,瀚天天成曾计划在上海证券交易所科创板上市࿰…...
全国产压力传感器常见的故障有哪些?
全国产压力传感器常见的故障如哪些呢?来和武汉利又德的小编一起了解一下,主要包括以下几类: 零点漂移 表现:在没有施加压力或处于初始状态时,传感器的输出值偏离了设定的零点。例如,压力为零时,…...
计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet
计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet 一、前言二、卷积神经网络基础概念2.1 卷积层2.1.1 卷积运算原理2.1.2 卷积核的作用与参数 2.2 池化层2.2.1 最大池化与平均池化2.2.2 池化层的优势与应用 2.3 全连接层2.3…...
在封装DLL时,避免第三方命名空间的依赖方法[PIMPL模式技术指南]
1. 概述 PIMPL(Pointer to IMPLementation)模式是C++中实现信息隐藏和二进制兼容性的重要设计范式,通过创建实现细节的私有封装层,有效隔离接口与实现。本文档详细阐述其核心原理、现代实现方式和典型应用场景。 2. 核心架构 2.1 经典结构 // 头文件(widget.h) class Wid…...
镜舟科技亮相 2025 中国移动云智算大会,展示数据湖仓一体创新方案
4月10-11日,2025 中国移动云智算大会在苏州金鸡湖国际会议中心成功举办。大会以“由云向智,共绘算网新生态”为主题,汇聚了众多行业领袖与技术专家,共同探讨了算力网络与人工智能的深度融合与未来发展趋势。 作为中国领先的企业级…...
通过Python实现定时重启H3C AP设备
一、背景 因为H3C的AP设备老化,网络出现高延迟、高丢包率,需要隔一段时间去重启AP后恢复。但是由于白天在使用无法进行重启,并且容易遗忘等用户反馈又太晚了,但是AC版本太老没有定时重启功能,于是通过Python做了自动重…...
火山RTC 4 音视频引擎 IRTCVideo,及 音视频引擎事件回调接口 IRTCVideoEventHandler
一、IRTCVideo、IRTCVideoEventHandler 音视频引擎 IRTCVideo,及 音视频引擎事件回调接口 IRTCVideoEventHandler 负责音视频管理、创建房间/获得房间实例 1、创建引擎、及事件回调示例 如: void VideoConfigWidget::initRTCVideo() {m_handler.res…...
Matlab 考虑电机激励力的整车垂向七自由度模型参数研究
1、内容简介 Matlab 201-考虑电机激励力的整车垂向七自由度模型参数研究 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
Matlab 三容水箱系统故障诊断算法研究
1、内容简介 Matlab 190-三容水箱系统故障诊断算法研究 可以交流、咨询、答疑 2、内容说明 略 其次,对 DTS200 三容水箱系统进行机理建模,可分为对象建模和故障 建模,搭建了水箱系统的 SIMULINK 模型并建立了基于 Taylor 展开及 T-…...
Mac学习使用全借鉴模式
Reference https://zhuanlan.zhihu.com/p/923417581.快捷键 macOS 的快捷键组合很多,相应的修饰键就多达 6 个(Windows 系统级就 4 个): Command ⌘ Shift ⇧ Option ⌥ Control ⌃ Caps Lock ⇪ Fn 全屏/退出全屏 command con…...
Arrays.asList() 隐藏的陷阱
在Java中,我们经常需要将数组转换为List来方便地进行操作。Arrays.asList()方法是一种常见的方式,但是它存在一个不太常见但需要注意的坑。 本文将深入探讨Arrays.asList()的使用,揭示其中的陷阱,并提供解决方案。 1、Arrays.as…...
Cables 现已正式启动积分计划 Alpha 阶段,开放早期白名单申请
Cables 现已正式启动积分计划,并开放白名单抢先体验通道,这标志着 Cables 平台进入第一阶段的部署,旨在为外汇及现实世界资产(RWAs)构建首个集成的流动性质押与永续期货 DEX。 Cables 平台的设计目标是通过单一系统实…...
Spring Cloud 远程调用
4.OpenFeign的实现原理是什么? 在使用OpenFeign的时候,主要关心两个注解,EnableFeignClients和FeignClient。整体的流程分为以下几个部分: 启用Feign代理,通过在启动类上添加EnableFeignClients注解,开启F…...
STM32单片机中EXTI的工作原理
目录 1. EXTI概述 2. EXTI的组成部分 3. 工作原理 3.1 引脚配置 3.2 中断触发条件 3.3 中断使能 3.4 中断处理 4. 使用示例 5. 注意事项 结论 在STM32单片机中,EXTI(外部中断)是一种用于处理外部事件的机制,能够提高对硬…...
排序算法详细介绍对比及备考建议
文章目录 排序算法对比算法逐一介绍1. 冒泡排序(Bubble Sort)2. 选择排序(Selection Sort)3. 插入排序(Insertion Sort)4. 希尔排序(Shell Sort)5. 归并排序(Merge Sort&…...
网页布局思路
一、布局思路 1,确定页面的版心(可视区) 2、分析页面中的行模块,以及每个行模块中的列模块。(页面布局第一准则) 3、一行中的列模块经常用浮动布局,先确定每个列的大小,之后确定列的位置(页面…...
CloudFlare Page 如何和 GitHub 创建连接
CloudFlare Page 能够对前端项目进行构建。 他们能支持从 GitHub 上直接拉取代码。 如果 GitHub 上的代码仓库不存在的话,首先需要创建一个连接才可以。 随后会要求登录 GitHub,然后可以在希望访问的组织中进行选择。 随后同意访问赋予权限即可。 Clou…...
Python爬虫第13节-解析库pyquery 的使用
目录 前言 一、pyquery 初始化 1.1 字符串初始化 1.2 URL 初始化 1.3 文件初始化 二、基本 CSS 选择器 三、pyquery 查找节点 3.1 子节点 3.2 父节点 3.3 兄弟节点 四、遍历 五、获取信息 5.1 获取属性 5.2 获取文本 六、节点操作 6.1 addClass 和 removeClass…...
【学习笔记】头文件中定义函数出现重复定义报错
目录 错误复现原因解决方案inlinestatic 扩展参考 错误复现 现在有一个头文件 duplicate_define.h 和两个源文件 duplicate_define_1.cpp 和 duplicate_define_2.cpp。 两个源文件都引入了头文件 duplicate_define.h,且在各自的函数中调用了定义在头文件中的全局函…...
Java 中的零拷贝技术:提升性能的利器
Java 中的零拷贝技术:提升性能的利器 在现代高性能应用中,数据传输的效率至关重要。传统的 I/O 操作通常涉及多次数据拷贝,这会导致性能瓶颈。而零拷贝(Zero-Copy)技术通过减少数据拷贝次数,显著提升了 I/…...
JavaScript:基本语法
今天我要介绍的新知识点内容为:JavaScript的基本语法以及使用说明。 首先我们先了解一下JS(JavaScript简称)是什么以及怎么使用JS: 介绍:JavaScript(JS)是一门弱类型的语言,用于给HTML页面上添加动态效果…...
Matlab 三维时频图
1、内容简介 Matlab 202-三维时频图 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
MySQL中动态生成SQL语句去掉所有字段的空格
在MySQL中动态生成SQL语句去掉所有字段的空格 在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况。其中,去掉字段中的空格是一项常见的操作。当表中的字段数量较少时,我们可以手动编写 UPDATE 语句来处理。但如果表中包…...
NO.91十六届蓝桥杯备战|图论基础-图的存储和遍历|邻接矩阵|vector|链式前向星(C++)
图的基本概念 图的定义 图G是由顶点集V和边集E组成,记为G (V, E),其中V(G)表⽰图G中顶点的有限⾮空集;E(G)表⽰图G中顶点之间的关系(边)集合。若 V { v 1 , v 2 , … , v n } V \left\{ v_{1},v_{2},\dots,v_{n} …...
树、二叉树、二叉查找树、AVL 树及红黑树的深入解析
树、二叉树、二叉查找树、AVL 树及红黑树的深入解析 1 .树的基本知识1.1 树的定义1.2 基本术语和概念1.3 常见树的结构1.4 树的遍历(取决于什么时候访问根节点) 2 二叉树2.1 二叉树的定义2.2二叉树与度为2的树的区别2.3二叉树的性质2.4 二叉树分类 3 红黑…...
BUUCTF-web刷题篇(21)
30.hark world 判断注入类型: 输入1报错提示bool(false)可知是字符型的布尔注入(盲注) 尝试万能密码 1 or 11 已检测SQL注入,猜测某些关键词或者字符被过滤。 使用FUZZ字典爆破...
Linux 网络基础知识总结
Linux 网络基础知识总结 1. 计算机网络体系结构 • OSI七层模型 由国际化标准组织(ISO)制定,将网络通信分为七层: • 物理层:比特流传输(如网线、光纤)。 • 数据链路层:帧传输&am…...
Day 8 上篇:深入理解 Linux 驱动模型中的平台驱动与总线驱动
在 Linux 内核驱动模型中,设备与驱动的组织方式不是随意堆砌,而是基于清晰的分类逻辑进行架构设计的。最核心的架构基础是“设备模型”(Device Model),而在此模型之上,各类驱动通过“平台驱动模型”与“总线…...
如何启动spark
解决:spark的bin目录下,无法启动spark问题 [roothadoop7 sbin]# ./start-all.sh ./start-all.sh:行29: /root/install/spark-2.4.0-bin-hadoop2.7/sbin/spark-config.sh: 没有那个文件或目录 ./start-all.sh:行32: /root/install/spark-2.4.0-bin-hadoo…...
Java网络编程干货
1.网络编程是什么 了解 在Java语言中,我们可以使用java.net包下的技术轻松开发出常见的网络应用程序,从而把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统&#x…...
Java实现安卓手机模拟操作
文章目录 第一部分:安卓模拟操作基础1.1 安卓输入系统概述1.1.1 输入事件传递机制1.1.2 输入事件类型 1.2 模拟操作的核心类1.2.1 Instrumentation类1.2.2 KeyEvent类1.2.3 MotionEvent类 1.3 权限要求1.3.1 普通权限1.3.2 特殊权限 第二部分:基础模拟操…...
一文讲清楚PLC、运动控制卡、运动控制器
随着工业技术的发展,工业机器人应用越来越广泛,PLC也不再是简单的可编程逻辑控制器,各个品牌厂家都推出了自己的运动控制型PLC,来实现一些运动控制功能,与此同时,运动控制卡及运动控制器也在如火如荼地发展…...
蓝桥杯备战
#include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(false);cin.tie(0);return 0; } 输入输出加速 ios::sync_with_stdio(false) 作用: 禁用 C 和 C 标准流的同步,使 cin/cout 速度接近 scanf/printf。 适用性ÿ…...
python保留关键字详解
一、什么是保留关键字? 保留关键字是Python语言中具有特殊含义和功能的词汇,这些词汇构成了Python的语法基础。它们不可被重新定义或用作变量名、函数名等标识符,在代码中承担着控制程序逻辑、定义数据结构等重要职责。 二、查看保留关键字…...
NLP中的“触发器”形式
在自然语言处理(NLP)中,触发器的设计更加依赖于文本特征,而非视觉特征。以下是NLP中常见的触发器类型及其实现方式: 1. 特定词汇或短语 定义:在文本中插入特定的单词、短语或符号。示例: 罕见…...
uView修改样式(持续更新)
场景 通过样式穿透修改uView2.0组件样式,用于app 注意版本不一样方法可能不同 实现 通用 .uni-body{line-height: 0; }u-input ::v-deep .u-input{height: 20.51rpx !important;padding: 0 6.59rpx !important; } ::v-deep .uni-input-input{height:50%;font-s…...
使用 Datadog 和 Slack Alerts 监控 AWS EC2
监控是大多数 IT 专业人员的关键职责之一。如果您最近正在寻找新工作,您可能已经注意到“监控”一词几乎出现在许多组织发布的每份职位描述中。 您可以找到各种监控工具,它们提供一些卓越的功能来简化您的工程工作。然而,Datadog 是大多数组…...
grafana/loki 部署搜集 k8s 集群日志
grafana/loki 和 grafana/loki-stack 的区别 Grafana 提供了多个 Helm Chart 用于在 Kubernetes 集群中部署 Loki 及相关组件,其中主要包括 grafana/loki 和 grafana/loki-stack。它们的主要区别如下: 1.grafana/loki Helm Chart: 专注于 Loki 部署: 该 Chart 专门…...
【ESP32S3】GATT Server service table传送数据到调试助手
前言 在初步学习esp32蓝牙的过程中,借鉴了官方的GATT Server Service Table Example,可以在readme中看到,此demo是采用低功耗蓝牙的通用属性服务器来创建订阅服务和特性。如果你接触过MQTT,你会发现GATT Server这一特性和MQTT的订…...
《Vue Router实战教程》5.嵌套路由
欢迎观看《Vue Router 实战(第4版)》视频课程 嵌套路由 一些应用程序的 UI 由多层嵌套的组件组成。在这种情况下,URL 的片段通常对应于特定的嵌套组件结构,例如: 通过 Vue Router,你可以使用嵌套路由配置…...
小白学习java第12天:IO流之转换流
我们可能会遇到这样情况就是:你在读取那个文件编码类型是GBK,而是进行读取的的时候使用的UTF-8,这就会导致乱码,因为你没办法保证别人是用什么类型进行编写的,因此我们就需要转换流进行处理这种情况! 下面…...
BERT - 直接调用transformers.BertModel, BertTokenizerAPI不进行任何微调
本节代码将使用 transformers 库加载预训练的BERT模型和分词器(Tokenizer),并处理文本输入。 1. 加载预训练模型和分词器 from transformers import BertTokenizer, BertModelmodel_path "/Users/azen/Desktop/llm/models/bert-base-…...
如何在 Spring Boot 项目中使用 MyBatis 进行批量操作以提升性能?
MyBatis 提供了 ExecutorType.BATCH 类型,允许将多个 SQL 语句进行组合,最后统一执行,从而减少数据库的访问频率,提升性能。 以下是如何在 Spring Boot 项目中使用 MyBatis 进行批量操作的关键点: 1. 配置 MyBatis 使…...