【C++】 C++11 新特性探索:decltype 和 auto
▒ 目录 ▒
- 🛫 问题
- 描述
- 环境
- 1️⃣ decltype
- 推导变量类型
- 推导函数返回类型
- 2️⃣ auto
- 自动推导变量类型
- 迭代器和范围循环
- 3️⃣ decltype 和 auto 同时使用
- 🛬 结论
- 📖 参考资料
🛫 问题
描述
C++11 引入了一些强大的新特性,其中包括 decltype 和 auto。本文将深入探索这两个关键字的作用和用法,并展示它们在现代 C++ 开发中的实际用例。
环境
| 版本号 | 描述 | |
|---|---|---|
| 文章日期 | 2023-12-16 | |
1️⃣ decltype
decltype 关键字用于推导表达式的类型,它可以根据表达式的结果推断出返回类型。它的语法如下所示:
decltype(expression)
推导变量类型
使用 decltype 可以方便地推导变量的类型,尤其是在复杂的模板编程场景下。例如,我们可以通过以下方式声明一个与已有变量类型相同的新变量:
int x = 42;
decltype(x) y; // 声明一个与 x 类型相同的变量 y
推导函数返回类型
decltype 还可以用于推导函数的返回类型。在某些情况下,函数的返回类型可能会非常复杂,使用 decltype 可以避免手动编写冗长的类型说明。例如:
int foo();
float bar();decltype(foo()) result1; // 推导出 foo() 的返回类型
decltype(bar()) result2; // 推导出 bar() 的返回类型
2️⃣ auto
auto 关键字用于自动推导变量的类型,它可以根据变量的初始值推断出最合适的类型。它的语法如下所示:
auto variable = expression;
自动推导变量类型
使用 auto 关键字可以更加简洁地声明变量,并且不需要显式指定变量的类型。编译器会根据变量的初始值自动推断出最合适的类型。例如:
auto x = 42; // x 的类型被推断为 int
auto y = 3.14; // y 的类型被推断为 double
auto z = "Hello"; // z 的类型被推断为 const char*
迭代器和范围循环
auto 关键字在处理容器迭代器和范围循环时非常有用。通过使用 auto,我们可以简化代码并避免繁琐的类型声明。例如:
std::vector<int> numbers = {1, 2, 3, 4, 5};// 使用 auto 迭代容器元素
for (auto it = numbers.begin(); it != numbers.end(); ++it) {std::cout << *it << " ";
}// 使用范围循环
for (auto number : numbers) {std::cout << number << " ";
}
3️⃣ decltype 和 auto 同时使用
经常写函数指针的情况,以前往往需要写大量定义。C11后(C17更强大)可以如下两种方式编写,代码更少更方便了。
- decltype(auto) func = &MessageBoxA;
- auto func2 = decltype(&MessageBoxA)MyMessageBoxA;
🛬 结论
decltype 和 auto 是 C++11 引入的两个重要关键字,它们为我们提供了更强大、更灵活的类型推导和变量声明方式。通过使用 decltype,我们可以方便地推导表达式和函数的返回类型;而使用 auto,则可以自动推导变量的类型,使
代码更加简洁。
这两个关键字在现代 C++ 开发中广泛应用于模板编程、容器操作和范围循环等场景。
然而,需要注意的是过度使用 decltype 和 auto 可能会导致代码可读性下降。在某些情况下,明确指定变量类型和函数返回类型可能更加明确和易于理解。因此,在使用这两个关键字时,我们应该权衡代码的简洁性和可读性,并根据实际情况做出合适的选择。
📖 参考资料
- decltype (C++) https://learn.microsoft.com/zh-cn/cpp/cpp/decltype-cpp?view=msvc-170
相关文章:
【C++】 C++11 新特性探索:decltype 和 auto
▒ 目录 ▒ 🛫 问题描述环境 1️⃣ decltype推导变量类型推导函数返回类型 2️⃣ auto自动推导变量类型迭代器和范围循环 3️⃣ decltype 和 auto 同时使用🛬 结论📖 参考资料 🛫 问题 描述 C11 引入了一些强大的新特性ÿ…...
【Jeecg Boot 3 - 第二天】1.2、jar 包和 lib 依赖分离,部署包缩小100倍
一、场景 二、思路 三、实战 ▶ 2.1、项目 jar 包解压获取 lib config Stage 1:正常打包获取 jeecg-system-start-3.6.0.jar Stage 2:解压 获取如下文件 Stage 3:获取 lib config ▶ 2.2、获取简化版项目jar包 Stage 1࿱…...
电商平台的易聊集成:无代码开发,API连接,CRM支持
连接电商与客服:易聊的创新解决方案 在迅速变化的电子商务市场中,企业要想保持竞争力,就必须拥有高效灵活的客服体系。易聊,一家领先的AISaaS服务商,正是基于这一需求,推出了一系列创新产品。它们通过智能…...
Draw.io or diagrams.net 使用方法
0 Preface/Foreword 在工作中,经常需要用到框图,流程图,时序图,等等,draw.io可以完成以上工作。 official website:draw.io 1 Usage 1.1 VS code插件 draw.io可以扩展到VS code工具中。...
CAPL——发送自定义报文
文章目录 一、前言二、CANoe操作二、CAPL程序三、Trace结果一、前言 CAPL是CANoe自带的一个编程语言,基本语法基于C语言,通过CAPL可以发挥CANoe更高效、更强大的功能。CAPL最大的特点就是可以编程灵活的完成报文的发送,报文包括通信报文及诊断报文 本文讲述模拟一个报文周…...
接口自动化测试实操【设置断言思路】
1 断言设置思路 这里总结了我在项目中常用的5种断言方式,基本可能满足90%以上的断言场景,具体参见如下脑图: 在这里插入图片描述 下面分别解释一下图中的五种思路: 1) 响应码 对于http类接口,有时开发人…...
windows redis 允许远程访问配置
安装好windows版本的redis,会以服务方式启动,但是不能远程访问,这个时候需要修改配置。redis安装路径下会有2个配置文件,究竟需要怎么修改才能生效呢?看下图 这里的redis服务指定了是redis.windows-service.conf文件&…...
三、JS逆向
一、JS逆向 解释:在我们爬虫的过程中经常会遇到参数被加密的情况,这样只有先在前端搞清楚加密参数是怎么生成的才能继续我们的爬虫,而且此时我们还需要用python去执行这个加密的过程。本文主要讲怎么在浏览器调试JS,以及Python执…...
HBase 高可用集群详细图文安装部署
目录 一、HBase 安装部署 1.1 Zookeeper 正常部署 1.2 Hadoop 正常部署 1.3 HBase 安装 1.4 HBase 的配置文件 1.4.1 hbase-env.sh 1.4.2 hbase-site.xml 1.4.3 regionservers 1.4.4 创建目录 1.5 HBase 远程发送到其他节点 1.6 HBase 服务的启动 1.6.1 单点…...
现代雷达车载应用——第2章 汽车雷达系统原理 2.6节 雷达设计考虑
经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.6 雷达设计考虑 上述部分给出了汽车雷达基本原理的简要概述。在雷达系统的设计中,有几个方面是必不可少的,它们决定了雷达系…...
【JVM从入门到实战】(五)类加载器
一、什么是类加载器 类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。 类加载器只参与加载过程中的字节码获取并加载到内存这一部分。 二、jdk8及之前的版本 类加载器分为三类: 启动类加载器-加载Ja…...
计算机毕业设计 基于Web的城市旅游网站的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
【人工智能革命】:AIGC时代的到来 | 探索AI生成内容的未来
🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. AIGC 技术的概述和发展趋势1.1 AIGC 技术的概述1.2 AIGC 技术的发展趋势 二. AIGC 与元宇…...
spring-boot-data-jpa、JPA实现分页
spring-boot-data-jpa、JPA实现分页 JPA越来越丰富了,下面使用springboot3.x实现JPA分页 通过传入PageRequest pageRequest PageRequest.of(page, size);到接口查询,返回Page拿到分页数据。 转自 https://lingkang.top/archives/jpa-shi-xian-fen-ye …...
云原生之深入解析如何在Kubernetes中快速启用Cgroup V2支持
一、cgroup v2 有哪些优势? Linux 中有两个 cgroup 版本:cgroup v1 和 cgroup v2。cgroup v2 是新一代的 cgroup API。Kubernetes 自 v1.25 起 cgroup2 特性正式 stable。cgroup v2 提供了一个具有增强资源管理能力的统一控制系统,cgroup v2…...
QT实现四则运算计算器
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setMaximumSize(240,300);this->setMinimumSize(240,300);this->setWindowTitle("计算器&…...
mysql的redolog、undo、binlog的作用
概览: MySQL三大日志包括:undolog,redo log,binlog,它们分别有以下作用: undolog:是Innodb存储引擎事务生成的日志。用于事务的回滚和MVCC,保证了事务的原子性。 redo log&#x…...
京东大数据-10月京东咖啡机市场销售数据分析-销售额增长41%,德龙等海外头部品牌店铺数据分析
如今,咖啡已经成为了人们日常生活中流行的生活饮品之一,消费量较大。随着咖啡的受众人群越来越多,消费者们对咖啡品质的要求也愈来愈高,而咖啡品质除了受咖啡豆质量影响外,还受制作过程中煮泡时间、水温和物料数量等因…...
【Android12】WindowManagerService架构分析
Android WindowManagerService架构分析 WindowManagerService(以下简称WMS) 是Android的核心服务。WMS管理所有应用程序窗口(Window)的Create、Display、Update、Destory。 因为Android系统中只有一个WMS(运行在SystemServer进程),可以称其为…...
部署LVS的NET模式
实验准备 #负载调度器# 192.168.116.40 #内网 12.0.0.100 #外网 先添加双网卡 #web服务器# 192.168.116.20 #web1 192.168.116.30 #web2 #nfs共享服务# 192.168.116.10 #nfs systemctl stop firewalld setenforce 0 1.nfs共享文件 1…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
