c++中auto与decltype使用

SAP 物料的分割评估 SAP 物料的分割评估 前言 本文主要讲解SAP中物料的分割评估,通过分割评估来区分出同一物料不同来源下的核算方式。例如:同一物料分为自产或者采购,或者同一物料分为进口或者国内采购等。 一、概述 分割评估一般用于以下场景: 1、物料分为内部采购和外部采购; 2、物料分属于进口或者国内采购; 3、物料分属于不同的批次; 4、物料分为自制或者采购。 由于物料的来源不同可能导致物料的价格或者性质不同,需要用不同价格来区分出 二、配置步骤 1.激活分割评估 ... 阅读详情

在 C++11及后续版本中,关键字auto和decltype都是用于类型推导的,但它们的使用场景和行为有所不同。

1. auto 关键字

作用

auto 用于自动推导变量的类型,由编译器根据初始化表达式来确定。

常见用法
// 基本用法
auto x = 42;        // int
auto y = 3.14;      // double
auto z = "hello";   // const char*

// 复杂类型简化
std::vector<int> vec = {1, 2, 3};
auto it = vec.begin();  // std::vector<int>::iterator

// 函数返回值推导(C++14及以后)
auto add(int a, int b) {
    return a + b;  // 返回类型为int
}
注意事项
  1. 必须初始化:auto 变量必须在定义时初始化,否则编译器无法推导类型。
  2. 引用和 cv 限定符:auto 通常会忽略引用和顶层 const,除非显式指定:
    const int& ref = x;
    auto a = ref;    // a是int(忽略引用和顶层const)
    auto& b = ref;   // b是const int&(保留引用和const)
    
  3. 模板类型推导规则:auto 使用与模板类型推导相同的规则(T 推导)。

2. decltype 关键字

作用

decltype 用于获取表达式的类型,而不实际计算表达式的值。

常见用法
int x = 42;
decltype(x) y = 0;  // y的类型是int

// 复杂类型
std::vector<int> vec;
decltype(vec.size()) size = vec.size();  // std::vector<int>::size_type

// 函数返回值类型推导(C++11及以后)
template<typename T, typename U>
auto add(T a, U b) -> decltype(a + b) {
    return a + b;
}
类型推导规则
  • 变量名:decltype(var) 返回变量的声明类型(包括引用和 cv 限定符)。
  • 表达式:decltype((var)) 返回引用类型(因为表达式是左值)。
  • 函数调用:decltype(func()) 返回函数返回值的声明类型。
int x = 42;
decltype(x) a = x;     // a是int
decltype((x)) b = x;   // b是int&(因为(x)是左值表达式)

3. decltype(auto)(C++14)

作用

decltype(auto) 用于精确推导类型,保留引用和 cv 限定符,通常用于转发函数或返回引用的函数。

int& func(int& x) { return x; }

auto a = func(x);        // a是int(丢失引用)
decltype(auto) b = func(x);  // b是int&(保留引用)

4. 对比总结

特性autodecltype
推导依据初始化表达式的类型表达式的类型(不计算值)
引用和 cv 限定符通常忽略顶层 const 和引用保留所有类型信息
适用场景变量定义、函数返回值简化模板元编程、返回类型后置
特殊形式auto&&(通用引用)decltype(auto)(精确推导)

5. 示例

泛型容器遍历
std::map<std::string, int> dict = {{"apple", 1}, {"banana", 2}};
for (const auto& pair : dict) {  // pair是const std::pair<const std::string, int>&
    // 使用pair.first, pair.second
}
元编程
template<typename T, typename U>
auto max(T a, U b) -> decltype(a > b ? a : b) {
    return a > b ? a : b;
}

总结

  • auto:适合简化类型名,由初始化表达式推导类型。
  • decltype:适合精确获取表达式的类型,常用于模板元编程或保留引用。
  • decltype(auto):结合两者优点,用于精确转发或返回引用。
算法笔记 经典取石子游戏总结 博弈论 经典取石子游戏总结 1.巴什博弈 有一堆石子共n个,A和B轮流取,A先取。每次最少取1个,最多取m个,先取完者获胜(即没有石子取的人失败)。A与B都足够聪明,问A能否获胜。 结论:当n%(m+1)!=0时A必胜,否则必败。 2.斐波那契博弈 有一堆石子共n个,A和B轮流取,A先取。每次最少取1个。第一次不能取完。从第二次开始,每个人取的石子数至少为1,至多为前一个人取的石子数的2倍。先取完者获胜。... 阅读详情

相关推荐

Qwen3-Embedding选型指南:0.6B/4B/8B三版本性能对比与场景匹配建议

本文深入解析阿里开源的Qwen3-Embedding系列模型(0.6B/4B/8B)的性能差异与适用场景,提供从边缘计算到云端部署的实战选型建议。通过实测数据对比响应延迟、内存占用和多语言精度等核心指标,帮助技术团队根据业务需求选择最优模型版本,并分享边缘设备优化与云端成本测算策略。

qsc901234567的博客 892

C++11:使用 auto/decltype/result_of使代码可读易维护

C++11 终于加入了自动类型推导。以前,我们不得不使用Boost的相关组件来实现,现在,我们可以使用“原生态”的自动类型推导了! C++引入自动的类型推导,并不是在向动态语言(强类型语言又称静态类型语言,是指需要进行变量/对象类型声明的语言,一般情况下需要编译执行。例如C/C++/Java;弱类型语言又称动态类型语言,是指不需要进行变量/对象类型声明的语言,一般情况下不需要编译(但也有编译

anzhsoft的技术专栏 1万+

MATLAB语言的并发编程

并发编程是指在同一程序中同时执行多个计算任务。通过将任务分解为较小的子任务,程序可以利用多核处理器的优势,提高计算效率。并发编程与并行编程密切相关,但不完全相同。并行编程强调任务的同时执行,而并发编程则侧重于任务的调度与管理,即使某些任务并没有同时执行。MATLAB的并发编程为数据分析、科学计算等应用提供了强大的支持。通过使用parforparfevalspmd等工具,用户可以轻松实现高效的并行计算。尽管MATLAB的并发编程工具相对简单易用,但在实际应用中仍需关注数据共享、通信、错误处理等问题。

2501_90485575的博客 365

C++11 auto 和decltype的使用

auto和decltype的使用autoauto使用的限制auto 的推导规则decltypedecltype 的推导规则auto和decltype的配合使用 auto C++编程时,常常需要把表达式的值赋给变量,需要在声明变量的时候清楚的知道变量是什么类型。然而做到这一点并非那么容易,有时候根本做不到。为了解决这个问题,C++11新标准就引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。和原来那些只对应某种特定的类型说明符(例如 int)不同。auto 让编译器通过初始值来进行类型推

CFH1021的博客 2146

Ubuntu 22.04 安装 IsaacLab 2.1.0

本文介绍了IsaacLab的完整安装流程:1)创建Python3.10虚拟环境;2)安装PyTorch2.5.1(CUDA11.8);3)升级pip并安装IsaacSim4.5.0;4)克隆IsaacLab仓库;5)运行安装脚本(需接受EULA)。若遇cmake缺失错误,需执行sudo apt安装。安装完成后可通过Ant-v0训练任务验证,成功运行后将显示IsaacSim窗口和训练完成提示。注意:IsaacSim不同版本可共存于不同环境。

weixin_47880303的博客 2224

Elsevier投稿实战:从ESWA模板到录用通知的全流程拆解

本文详细拆解了Elsevier旗下期刊ESWA(Expert Systems With Applications)的投稿全流程,从模板选择、投稿系统操作到审稿意见回复和录用后注意事项。重点分享了单栏LaTeX模板调整、APA文献格式处理、Highlights撰写技巧等实战经验,帮助研究者高效完成投稿并提升录用概率。

weixin_32715349的博客 241

C++11——类型推导(auto和decltype的使用)

文章目录1.1 类型推导1.1.1 auto类型推导1.1.2 decltype关键字1.1.3返回类型后置语法——auto和decltype的结合使用 1.1 类型推导 1.1.1 auto类型推导 1.auto关键字的新意义 auto关键字是一个类型指示符,用来提示编译器对此类型的变量做类型的自动推导。 auto x = 5; //OK:x是int 类型 auto pi = new auto(1); //OK:pi被推导为int* const auto v = &x,u = 6; //OK:

qq_50465499的博客 579

MDPI期刊投稿全流程解析:从注册到提交的实用指南

本文详细解析了向MDPI期刊投稿的全过程,从注册账号、完善个人资料、上传稿件,到填写作者信息、推荐审稿人及提交附信等关键步骤。指南强调了使用机构邮箱、遵循期刊模板、认真准备Cover Letter等实用技巧,旨在帮助作者高效、规范地完成投稿,避免常见错误,提升稿件处理效率。

weixin_29250403的博客 924

【C++11】auto与decltype关键字使用详解

auto和decltype是C++11引入的俩个重要的新关键字,用于在编译期自动推导出变量或表达式的类型。极大提高代码的可读性和简洁性,并且有助于减少类型转换错误。在不影响代码可读性的前提下可以尽可能的使用auto。复杂类型用auto,但是简单内置类型就没有必要使用auto了。总之避免过度使用auto和decltype,以保持代码的可读性和维护性。

xiaofeizai1116的博客 514

DDR内存Prefetch机制详解:从DDR1到DDR4的技术演进与性能提升

本文深入解析DDR内存Prefetch机制从DDR1到DDR4的技术演进与性能提升。通过分析Prefetch技术的实现原理与Burst传输的协同机制,揭示DDR1的2n Prefetch、DDR2的4n Prefetch、DDR3的8n Prefetch以及DDR4的Bank Group架构创新如何显著提升内存带宽与系统性能。

weixin_30369041的博客 537

MATLAB代码转到FPGA代码

添加完文件之后,需要设置输入的数据类型,设置完之后点击Workflow Advisor。MATLAB文件包含一个功能实现文件和测试文件。对应FPGA中的功能文件和测试文件。然后,将功能文件和测试文件添加到相应位置。然后选择APP中的HDL Coder代码。首先需要编写好MATLAB文件。点击链接,就可以查看你看到的代码。可以自己生成代码的语言类型。

小柚子的博客 3062

C++11的auto和decltype的使用

一、auto类型说明符 1、auto让编译器通过初始值来推算变量的类型,所以auto定义的变量必须有初始值。 int x=0; auto i=x; &gt;&gt;auto=int; 2、使用auto可以在一条语句中声明多个变量。因为一条声明语句只能有一个基本数据类型,所以该语句中所有变量的初始值的基本数据类型都必须一样。注意:符号&amp;和*只从属于某个声明符,而非基本数据类型的一...

linux驱动开发大纲 375

matlab 异常值检测与处理——Robust Z-score法【2024最新版】

博客长期更新,本文最近一次更新时间为:2024年12月9日。

点云侠的博客 1516

C++11/14中 auto 和 decltype的使用

转自:https://github.com/changkun/cpp1x-tutorial C++11 引入了 auto 和 decltype 这两个关键字实现了类型推导,让编译器来 操心变量的类型。这使得 C++ 也具有了和其他现代编程语言一样,某种意义上提供了无需操心变量类型的使用习惯。 auto auto 在很早以前就已经进入了 C++,但是他始终作为一个存储类型的指示符存 在...

未来之歌 2079

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

1. C++11特性之类型自动推导auto和decltype的使用

声名:本文在学习时参考北京邮电大学崔崔毅东、杨谈老师的C++程序设计(面向对象进阶)的课程 C++11中,auto关键字放在变量之前,作用是在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型。 decltype是在编译期推导一个表达式的类型,它只做静态分析,因此它不会导致已知类型表达式执行。decltype 主要用于泛型编程(模板) 1. auto的使用限制 1.1. auto 变量必...

sundynes 之Hello word 328

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

(C++ std学习) —— auto 和 decltype的理解和使用

文章目录(C++ STD学习) —— auto 和 decltype的理解和使用概述和背景参考文本和自行翻译定义笔记案例代码分析自己编写的代码中使用分析个人格言 (C++ STD学习) —— auto 和 decltype的理解和使用 概述和背景      在自己编写代码的项目中,有些地方碰到同事特别喜欢使用auto和decltype作为使用的方法,就是比较喜欢用C++11这个特性,我才发现自己之前对这方面有些抵触,我个人习惯是能不用auto就不用auto,不然一堆auto别人看了也不好理解到底是个什么类

莫寒技术人生 399

C++ Primer学习纪录(二)别名的使用、auto和decltype类型指示符

别名 定义别名有两种方法,一种是从C语言沿用下来的typedef关键词, 还有一种为C++11重新加入的using来对别名进行声明 用法: typedef double wages; typedef wages base, *p; typedef struct TNode { int data; struct TNode *left, *right; } TNode, *TreeNode; // using 的使用 using wages = double; using TreeNode = str

weixin_41194846的博客 335

C++11 auto和decltype关键字

auto 可以用 auto 关键字定义变量,编译器会自动判断变量的类型。例如: auto i =100; // i 是 int auto p = new A(); // p 是 A* auto k = 34343LL; // k 是 long long 有时,变量的类型名特别长,使用 auto 就会很方便。例如: map <string, int, greater <strin...

luoyayun361的专栏 681

C++学习笔记3--auto、typeid、decltype使用

C++11新增了一个工具,让编译器可以根据初始值的类型推断变量的类型,为此它重新定义了auto的含义。 #include&amp;amp;lt;iostream&amp;amp;gt; #include&amp;amp;lt;stdlib.h&amp;amp;gt; //自动变量,自动获取类型,输出,泛型 void main() { auto num = 10;//自动变量,自动匹配类型 auto numA = 10/3.0; ...

暮日落流年的博客 1837

C++类型推导auto与decltype使用技巧

在现代C++编程中,类型推导是提升代码简洁性和可维护性的重要工具。auto和decltype作为C++11引入的关键字,能够帮助开发者减少冗余的类型声明,同时增强代码的灵活性和表达力。本文将深入探讨auto和decltype的使用技巧,帮助读者掌握它们的核心应用场景,并避免常见陷阱。auto关键字能够根据初始化表达式自动推导变量类型,特别适用于复杂类型或模板代码中。C++类型推导:auto与decltype的实用技巧。自动类型推导auto的常见用法。

aayjvk_231的博客 249

C++类型推断auto,decltype的使用,typeid(求类型名)。

1:auto的使用 2:decltype的使用 3:typeid的使用 (打印类型的名字)

QNBZ的博客 1120
上一篇: STL 容器迭代器失效问题分析与解决方案
下一篇: c++中左值与右值
mxpan
博客等级 码龄18年 176粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mxpan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值