类型说明符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概念】迁移学习 vs. 域自适应 vs. 域泛化|定义、核心原理、数学表达、易混淆点与工程选择建议|实际案例、工程实现细节、未来研究趋势、实际应用场景 大家好,我是爱酱。本篇将会详细梳理迁移学习(Transfer Learning)、域自适应(Domain Adaptation)、域泛化(Domain Generalization)三大常被混淆的核心概念,结合数学公式、典型算法与实际应用场景,帮助你厘清它们的本质区别、联系与工程意义。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力! 阅读详情

相关推荐

通达信【雷霆尊者排序】实战指南:高胜率竞价指标解析与优化策略

本文详细解析了通达信【雷霆尊者排序】指标在集合竞价阶段的应用,提供从基础设置到实战解码的完整指南。文章重点剖析了‘雷霆’、‘使者’、‘精选’等核心信号的逻辑与共振策略,并分享了如何结合K线、市场情绪进行综合研判与风险控制,旨在帮助短线交易者提升早盘选股效率与胜率。

pear55的博客 950

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

本文介绍了decltype类型指示符

hubing_hust的专栏 6605

U盘 未知USB设备 设定地址失败 由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案(做过系统装机盘而无法解决的必看)

U盘由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案 我们在使用U盘的时候偶尔会碰到下列情况 一般是因为传输数据的过程中,死机或未响应直接断点或拔掉设备导致的,U盘再次插上之后出现设定地址失败。无法再次读取设备的数据。 解决方案: 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损伤导致的!!! 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损...

qq_39123987的博客 13万+

【C++深陷】之“decltype”

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

生活需要深度 960

FAGLB03余额显示异常排查与修复指南

本文针对SAP新总账中FAGLB03报表余额显示异常问题,提供了专业的排查与修复指南。文章深入剖析了数据不一致的核心原因,如FAGLFLEXT汇总表与凭证明细不同步、年度余额结转(FAGLGVTR)失败等,并详细介绍了使用FAGLF03进行精准诊断、通过SE38执行标准调整程序TFC_ADJUST_VZ进行修复的标准操作流程,帮助用户快速恢复数据一致性,确保财务报表的准确性。

weixin_29313423的博客 307

使用SpringBoot+Vue3开发项目(1)---- 设计用户注册和登录的接口及页面

本文基于黑马大事件项目介绍如何使用SpringBoot+Vue3来实现前后端联调的登录与注册操作。

记得开心一点嘛的博客 3643

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

TEC控制器芯片 ADN8835 中文数据手册

ADN8835是一款高集成度的单芯片TEC控制器。它包括线性电压调节模块脉冲宽度调制(PWM) 电压调节模块和两个零漂移、轨到轨斩波放大器。线性控制器和PWM驱动器用于控制H桥配置中的内部功率MOSFET。通过测量热传感器反馈电压,并使用集成的运算放大器作为比例-积分-微分(PID)补偿器来调理信号,ADN8835通过TEC驱动电流,将连接至TEC模块的激光二极管或无源组件的温度稳定到编程的目标温度。

lu2289504634的博客 9533

C++笔记

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

yjplovegn的博客 934

如何在 R 中执行 Kruskal-Wallis 检验

Kruskal-Wallis 检验用于确定三个或更多独立组的中位数之间是否存在统计学上的显着差异。它被认为是单向方差分析的非参数等效项。本教程介绍了如何在 R 中执行 Kruskal-Wallis 检验。示例:R 中的 Kruskal-Wallis 检验 假设研究人员想知道三种不同的肥料是否会导致不同水平的植物生长。他们随机选择 30 种不同的植物并将它们分成三组,每组 10 株,每组施用不同的肥料。在一个月结束时,他们测量每株植物的高度。使用以下步骤执行 Kruskal-Wallis 检验以确定三个组的中

Mrrunsen的博客 3798

Vue3 - vite 项目报错:Uncaught ReferenceError: require is not defined(解决 vue3 vite 项目无法识别 require 语法导致报错)

vue3,vite,报错解决,vue3+vite报错requireisnotdefined,vue3vite引插件不识别require,老插件必须用require怎么办,vite项目插件要求使用require引入但报错,vue3不兼容require导致第三方包插件无法使用,vue3vite中使用require报错怎么办,解决Vite+vue3使用第三方依赖报错“requireisnotdefined”问题,vite项目require语法兼容问题解决requireisnotdefine

🏆 前端领域优质创作者 2万+

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

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

qq_43923676的博客 262

真题库系列之 CCF GESP 2025年12月认证 Python 1级真题含正确答案与解析

学生通过计算机基础知识的学习,了解计算机的构成与操作,以及计算机的发 展历程。通过编程基础知识以及语句的掌握,可以独立完成简单功能的顺序结构、 分支结构、循环结构的程序。

iCloudEnd的博客 317

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

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

Player1118的博客 281

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++ 类型说明符auto和decltype

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

路漫漫其修远兮 845

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

类型别名、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、付费专栏及课程。

余额充值