类型说明符auto和decltype

【C++】3-1.12 c++11自动类型推导关键字 decltype 【C++】3-1.12 c++11自动类型推导关键字 decltype背景decltype与auto的对比示例 背景 在以下博客中介绍了自动类型推导关键字 auto: c++11自动类型推导关键字 auto https://blog.youkuaiyun.com/jn10010537/article/details/115449524 有了auto,为什么还要decltype? 原因是,我们有时候想要从表达式的类型推断出要定义的变量类型,但不想用该表达式的值初始化变量。 decltype是在编译期推导一个表达式的类型, 阅读详情

类型说明符auto和decltype

auto和decltype都是C++11标准提出来的类型说明符,都可以通过编译器自动推断出表达式的类型,从而用这个类型定义新的变量,如:

double v1 = 9.8, v2 = 1.3;
auto v3 = v1 + v2;
decltype(v1 + v2) v4;

// 我们可以通过typeid().name()来查看变量的类型,需要加上头文件typeinfo
// 可以看到v3和v4的类型都是d,即double类型
cout << typeid(v3).name() << " " << typeid(v4).name();	

auto和decltype的区别

1 初始值

auto在定义变量时必须要有初始值,而decltype则不一定需要初始值,比如上面的代码所示,auto需要从用来初始化的表达式中推出断出新定义变量的类型,而decltype则是将表达式写在括号内,先推断出类型,再去定义变量。

2 顶层const

auto一般会忽略掉顶层const和引用,只保留底层const。而decltype会保留顶层const和引用。(如果你对顶层const和底层const有疑问,请点击这篇博客:https://blog.youkuaiyun.com/whatiscode/article/details/108723598)

int i = 0;
const int ci = i, &cr = ci;
auto a = ci;	//a是一个整数(ci的顶层const特性被忽略掉了)
auto b = cr;	//b是一个整数(cr的引用特性被忽略掉了)
auto c = &i;	//c是一个整型指针
auto d = &ci;	//d是一个指整型常量的指针(底层const被保留)

decltype(ci) x = 0;	//x的类型是const int(ci的顶层const特性被保留)
decltype(cr) y = x;	//y的类型是const int&,y绑定到x(cr的引用特性被保留)

3 括号

对于decltyp所用的表达式来说,在变量名上加上一对括号得到的类型和不加括号时会有不同。如果decltype给变量加上了一层或者多层括号,那么编译器就会把它当成一个表达式,decltype得到的类型将会是引用。(变量是一种可以作为赋值语句左值的特殊表达式)

int i = 0;
decltype((i)) d;	//错误:d是int&,必须初始化
decltype(i) d;		//正确,d是int,未初始化

4 数组

当表达式表示一个数组时,auto推断出的类型将会是一个指针,指向该数组的第一个元素的地址,而decltype推断出的类型将会是一个数组。

int ia[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};						//ia是一个含有10个整数的数组
auto ia2(ia);													//ia2是一个整型指针,指向ia的第一个元素
decltype(ia) ia3 = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19};	//ia3是一个含有10个整数的数组

decltype和解引用

如果表达式的内容是解引用操作,则decltype将得到引用类型。

int i =43, j = 12, *p = &i;
decltype(*p) c = j;	//c是int&,引用类型,必须初始化
新手也能写复杂爬虫!AI+Python自动分析京东商品,提取数据不用F12 不用F12:AI自动分析京东页面,生成选择器;不用懂JS:Playwright自动渲染动态数据;不用改代码:只需配置3个参数,复制运行就能出结果。这套方案不仅适用于京东,修改提示词后还能爬取淘宝、拼多多、亚马逊等电商网站,新手只需掌握“配置参数→运行代码→查看CSV”3步,就能轻松获取任意网站的结构化数据。未来,AI会让爬虫彻底进入“零代码、零门槛”时代,新手也能轻松搞定复杂数据爬取需求。 阅读详情

相关推荐

安装Quartus-II 13 和Modelsim

目录一、Quartus-II安装1.Quartus-II 13下载2.Quartus-II 13安装3.Quartus-II 13注册二、Modelsim安装 实验目的:安装Quartus-II 13 和Modelsim 实验环境:Windows10 参考资料:Quartus-II安装及使用 一、Quartus-II安装 1.Quartus-II 13下载 正点原子官方资料下载 百度网盘下载链接: https://pan.baidu.com/s/1a9d-bq9RZmWrRV542X4IEA 提取码:

qqq080的博客 8626

C++11之后的decltype类型指示符

本文介绍了decltype类型指示符

hubing_hust的专栏 6605

薛定谔虚拟筛选实战:如何用PDB文件快速构建受体格点(避坑指南)

本文提供了薛定谔虚拟筛选实战指南,聚焦于如何从PDB文件快速、精准地构建受体格点。文章详细解析了可变残基的理性处理策略、基于配体尺寸的盒子量化设置方法,并分享了高级约束与排除体积的实战技巧,旨在帮助用户避开常见陷阱,提升虚拟筛选的成功率与效率。

weixin_28419039的博客 252

【C++深陷】之“decltype”

①作用于变量直接得到变量的类型;②作用于表达式,结果是左值的表达式得到类型的引用,结果是右值的表达式得到类型;当变量作为表达式时,返回的是该变量的一个左值形式(因为该表达式的结果可以作为赋值语句的左侧的值)。解引用运算符*作用于指针类型,得到了p指向的对象的左值(*p = 2很正确),p是指向int的指针,因此decltype(*p)得到的类型是int &。①当使用decltype(var)的形式时,decltype会直接返回变量的类型(包括顶层const和引用),不会返回变量作为表达式的类型。

生活需要深度 960

单细胞测序数据读取实战指南:从入门到精通

本文提供了单细胞测序数据读取的实战指南,涵盖从标准10X Genomics格式到通用表达矩阵及RDS文件的读取方法。文章重点解析了数据读取的核心步骤、常见问题解决方案及进阶技巧,旨在帮助用户夯实数据分析基础,确保后续分析流程的准确性。

weixin_29095587的博客 460

分布式光纤传感(DFOS)DTS/DAS/DSS 三合一:10公里管线监测实战与数据解读

本文详细介绍了分布式光纤传感(DFOS)技术在10公里管线监测中的实战应用,通过DTS(温度)、DAS(振动)、DSS(应变)三合一系统,实现对管线健康状态的立体感知。文章涵盖工程部署、数据采集、多物理量数据融合及噪声抑制等关键技术,展示了如何通过一根光纤完成复杂监测任务,显著提升管线安全性和维护效率。

weixin_29168153的博客 315

C++基础 Chapter 2

1.指向指针的引用 引用本身不是一个对象,不能定义指向引用的指针;指针是对象,所以存在对指针的引用 int i = 42; int *p; int *&r = p; //r是对指针p的引用 r = &i; //r引用了一个指针,因此给r赋值&i就是令p指向i *r = 0; //将i的值改为0 2.const限定符 const对象必须初始化,初始值可以是任意复杂表达式 默认状态下,const对象仅在文件内有效 某些时候需要多文件使用某个const对象,则只需要

qq_44789094的博客 597

纽马克-贝塔法(Newmark-Beta Method)在结构动力学中的应用与实现

本文深入解析了纽马克-贝塔法(Newmark-Beta Method)在结构动力学数值计算中的核心原理与应用。作为经典的时间积分算法,它通过调节γ和β参数,在计算精度、稳定性与效率间取得平衡,尤其适用于地震响应、风振分析等工程场景。文章详细阐述了其数学内核、在有限元分析中的实现步骤,并对比了隐式与显式方案的适用场景,为工程师提供了关键的方法选择与参数调优指导。

weixin_29232121的博客 148

C++笔记

unsigned int 可以缩写为unsigned 使用int执行整数运算。在实际应用中,short常常显得太小而long一般和int有一样的尺寸。如果你的数值超过了int的表示范围,选用long long 执行浮点数运算选用double,这是因为float通常因为精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如,8比特大小的unsigned char 可以表示0-255区间内的值,如果.

yjplovegn的博客 934

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1631

【Bug已解决】NCCL timeout for validation 解决方案

训练用多卡 DDP / FSDP 正常,但一到或者进程直接 hang 在 eval 的某个集合通信上。最迷惑的是:训练阶段(有集合通信)完全正常,偏偏 eval 阶段(看起来更轻量)超时。因为 eval 阶段某些 rank 没参与 collective,导致参与的那部分 rank 永远等不到同伴。

一键难忘的博客 142

C++中auto类型说明符和decltype类型指示符

文章目录auto类型说明符复合类型常量和autodecltype类型指示符decltype和引用 auto类型说明符 编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚的知道表达式的类型,为了解决这个问题,C++11新标准引入了auto类型的说明符,用它就能让编译器替我们分析表达式所属的类型。 auto让编译器通过初始值来推算变量的类型,显然,auto定义的变量必须有初始值。 使用a...

qq_43923676的博客 262

【嵌入式DIY实例-Arduino篇】-脉搏传感器监测脉搏率 (BPM)及可视化

在本文中,我们将使用 Arduino 和脉搏传感器来测量心率 (BPM)。 在文章中,我们将向展示如何使用脉搏传感器测量您的心率(每分钟心跳次数),并在电脑上位机通过Processing来实现心率数据可视化。同时使用LCD16×2 显示屏显示脉搏率 BPM。 该传感器易于使用和操作。 只需将手指放在传感器顶部,它就会测量心跳变化。

视觉与物联智能 834

类型别名、auto类型说明符和decltype类型指示符

类型别名、auto类型说明符和decltype类型指示符

Player1118的博客 281

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C++ Primer 类型别名、auto类型说明符和decltype类型指示符 笔记

2.5 处理类型 2.5.1 类型别名 有两种方法可用于定义类型别名(type alias)。传统的方法是使用关键字typedef: typedef double wages; // wages是double的同义词 typedef wages base, *p; // base是double的同义词,p是double*的同义词 其中,关键字typedef作为声明语句中的基本数据类型(参见2.3节,p45)的一部分出现。和以前的声明语句一样,这里的声明符也可以包含类型修饰,从而也能由基本数据类型构

rrrrrr89098087的博客 308

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C++ 类型说明符auto和decltype

前言 随着程序越来越复杂,程序中用到的类型也越来越复杂,这种复杂性有两方面: (1)一些类型难以“拼写”,它们的名字既难记住用容易出错,还无法明确体现其真实目的和含义; (2)有时候根本搞不清楚到底需要什么类型,程序员不得不回头从程序的上下文寻求帮助。 这里主要针对(2)来分析。   auto   C++11引入auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。和...

路漫漫其修远兮 845

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

类型别名、auto类型说明符和decltype类型说明符初探

类型别名        类型别名顾名思义是某种类型的另一个名字,常用于简化类型,易于理解和使用。        传统方法是使用关键字 typedef 。新标准规定使用别名声明(alias declaration)来定义类型别名。 using zhengxing = int;          如果某个类型别名指代的是复合类型或常量,那么把它用到声明语句中往往会让人理解出错。 typ

yiyi__baby的专栏 970

C++ auto和decltype类型说明符

想要用好auto的便利,就要弄清楚编译器是怎么自动推断auto的类型的,有哪些注意事项。

Liber-coder的博客 323

auto类型说明符和decltype类型指示符

auto类型说明符能让编译器替我们去分析表达式所属的类型,让编译器通过初始值来推算变量的类型。auto定义的变量必须有初始值 使用auto也能在一条语句中声明多个变量 当引用被用作auto初始值时,真正参与初始化的其实是引用对象的值。此时编译器以引用对象的类型作为auto的类型 当初始变量是一个指向常量的指针时: #include &lt;iostream&gt;...

ziggyPLAYguitar的博客 318

c++的auto类型说明符和decltype类型指示符

auto类型说明符 编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。c++11新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型,且,auto定义的变量必须有初始值。 // 由val1和val2相加的结果可以推断出item的类型 auto item = ...

进击的Explorer 286

类型说明符auto 和类型指示符decltype

类型说明符auto 和类型指示符decltype 一、auto 当需要将一个表达式的值赋给常量时,可以使用auto说明符,它会让编译器帮我们去推断表达式值的类型。同样也可以使用auto进行声明变量。 auto result = val1 + val2; auto i = 0, *p = &i; //true auto i = 0, pi = 3.15; //false 二、decltype 有时我们只想知道表达式值的类型,而不用该值去进行初始化,可以用decltype指示符。 decltype(f

十一分的平庸 230

C++之类型别名和auto类型说明符、decltype类型

类型别名: 使用类型另外一般就是让复杂的名字变得更简单。 传统方法是使用typedef关键字: typedef double wages; //现在的wages是double的同义词 wages hight=3.14; //正确,因为wages是double的别名 等价于 double hight = 3.14; typedef wages base,*p ; //basr是double的同义词,重要的是p是double*的同义词 base sy001 = 3.14; p sy003=&sy

m0_57035799的博客 224

自动获取类型的auto和decltype类型说明符

自动获取类型的auto和decltype类型说明符

成长的点滴 616

C++primer中constexper和常量表达式、auto类型说明符、decltype类型指示符、自定义数据结构知识点及部分例题答案、以及学习心得感受

1、constexpr 和常量表达式 常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。 例子:(1)const int max_files=20; //max_files是常量表达式 (2)const int limit...

WangY.H 774

C++11:"auto"和"decltype"类型说明符的思考

//例1//编译器:gcc 4.8.1 系统:windows#include int main() { int i = 1; auto a = i; decltype(i) d = 2; std::cout << "a: " << a << std::endl; std::cout << "d: " << d << std::endl; return 0; } 输出

u010183589的博客 569

C++20 decltype,decltype(auto) (tcy)

一.decltype说明符 1.1.语法: decltype ( entity ) 实体 decltype ( expression )//返回 expression 表达式的类型-必须加括号 1.2.用途: 1)在声明使用标准符号难以或无法声明的类型时使用 (如与lambda相关的类型或依赖模板参数的类型)与auto一样用于进行编译时类型推导 2)检查实体的声明..

tcy-阿春 1242
上一篇: 枚举enum
下一篇: 利用GitHub+Hexo搭建个人博客(Mac)
威士忌燕麦拿铁
博客等级 码龄10年 5442粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值