【Effective Modern C++】条款2:理解auto类型推导

news2024/11/26 10:49:06

条款2:理解auto类型推导

条款1中,模板类型推导的函数模板形如:

template<typename T>
void f(ParamType param);

当变量采用auto声明时,auto扮演了模板中的T这个角色,而变量的类型扮演的是ParamType的角色。
条款1中的三种情况同样也适用于auto,只有下面的一点不同。

当用于auto声明变量的初始化表达式是使用大括号括起时,推导所得的类型就属于std::initializer_list。但是,如果向对应的模板传入一个同样的初始化表达式,类型推导就会失败。

auto x = {11, 23, 9};  // x的类型是std::initializer_list

template<typename T>
void f(T param);

f({11, 23, 9});   // error,无法推导T的类型

所以,auto和模板类型推导真正的唯一区别在于,auto会假定用大括号括起的初始化表达式代表一个std::initializer_list,但模板类型推导却不会。

只有将param声明为std::initializer_list<T>,模板类型推导机制会推导出T应有的类型。

template<typename T>
void f(std::initializer_list<T> initList);

f({11, 23, 9});  // T的类型为int

C++14中,允许使用auto来说明函数返回值需要推导,lambda表达式中也会在形参声明中用到auto。然而,这些auto用法是在使用模板类型推导而非auto类型推导。

auto createInitList()
{
    return {1, 2, 3};   // 错误,无法为{1, 2, 3}完成类型推导
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1175851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何提高CRM系统的使用率?

​ CRM客户管理系统采购以后不投入使用&#xff0c;或者用了却用不好&#xff0c;都是极大的浪费。在知道CRM系统使用率低的原因之后&#xff0c;就要通过有效的方法提升CRM使用率。下面整理了六个方法&#xff0c;告诉您如何提高CRM系统的使用率。 有人演奏不出优美的曲子&a…

本地如何安装多个node版本

使用nvm 1官网下载 Releases coreybutler/nvm-windows GitHub 2.安装完 nvm -v检查是否按照成功 三、nvm的使用 安装完毕后&#xff0c;找到安装的路径&#xff0c;一些简单配置&#xff0c;打开setting.txt (是下载完毕之后自动帮你生成npm 下载node包之后不用重复安装…

【23真题】满分!最高150分!评级A+!

今天分享的是23年西南交通大学924的信号与系统试题及解析。这套卷子是回忆版&#xff0c;我已经尽力去还原了&#xff0c;全网仅此一份。如果有疏漏的地方&#xff0c;欢迎大家和我反馈。 本套试卷难度分析&#xff1a;平均分在124分&#xff0c;最高分有满分150分&#xff01…

高清Logo素材无忧:这5个网站解决所有问题!

今天给大家分享几个素材网站&#xff0c;基本上可以下载各大企业的 Logo&#xff0c;而且还是矢量格式哦~ 即时设计 即时设计是一款国产免费的 Logo 在线设计制作工具&#xff0c;浏览器内打开即用&#xff0c;对于使用系统没有任何限制。在即时设计&#xff0c;你可以从 0 到…

【数智化案例展】正官庄——全球商业数智化实践案例

‍ Marketingforce案例 本项目案例由Marketingforce投递并参与数据猿与上海大数据联盟联合推出的《2023中国数智化转型升级创新服务企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 电商行业持续发展&#xff0c;而对于品牌来说&#xff0c;面对多个分…

陈海波:OpenHarmony技术领先,产学研深度协同,生态蓬勃发展

11月4日&#xff0c;以“技术筑生态&#xff0c;智联赢未来”为主题的第二届OpenHarmony技术大会在北京隆重举办。本次大会由OpenAtom OpenHarmony&#xff08;简称“OpenHarmony"&#xff09;项目群技术指导委员会&#xff08;TSC&#xff09;主办&#xff0c;由华为技术…

第十一章 Python 常用标准库

系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…

解决Lightroom Classic无法使用修改照片的问题

Lightroom Classic是一款广泛使用的照片编辑软件&#xff0c;但在使用过程中&#xff0c;可能会遇到无法修改照片的问题。修改照片这个模块无法使用&#xff0c;功能按钮呈现灰色&#xff0c;无法点击。本文将介绍几种常见的解决方法&#xff0c;帮助您快速解决Lightroom无法使…

Banana Pi BPI-W3 RK3588平台驱动调试篇 [ PCIE篇一 ] - PCIE的开发指南

RK3588平台驱动调试篇 [ PCIE篇 ] - PCIE的开发指南 1、PCIE接口概述 PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;是一种用于连接计算机内部组件的高速接口标准。以下是关于PCIe接口的简要介绍&#xff1a; 高速传输&#xff1a; PCIe接口提供了…

springboot 文件上传 阿里云OSS

一、介绍 文件上传&#xff0c;是指将本地图片、视频、音频等文件上传到服务器上&#xff0c;可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛&#xff0c;我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务&#xff0c;需要有存储的支持&…

01-Spring中事务的实现和事务的属性

银行账户转账异常 需求: 实现act-001账户向act-002账户转账10000,要求两个账户的余额一个减成功一个加成功,即执行的两条update语句必须同时成功或失败 实现步骤 第一步: 引入项目所需要的依赖 <?xml version"1.0" encoding"UTF-8"?> <proj…

LeetCode | 206. 反转链表

LeetCode | 206. 反转链表 OJ链接 这里有两个思路 我们先来看第一个思路&#xff1a; 创建一个新的链表&#xff0c;然后将原链表头插头插需要保存下一个的地址&#xff0c;再头插 代码如下&#xff1a; struct ListNode* reverseList(struct ListNode* head) {struct ListN…

利用机器学习的力量来对抗野火

一、介绍 野火因其对环境、经济和社会的破坏性影响而成为日益紧迫的全球关注点。近年来&#xff0c;野火的频率和强度显著上升&#xff0c;气候变化和土地管理实践等因素加剧了野火。解决这一危机需要创新和多方面的方法&#xff0c;一个有前途的途径是将机器学习整合到野火管理…

Hugging Face高效训练技术一:单 GPU 高效训练

文章目录 一、模型训练1.1 准备测试数据1.2 加载模型1.3 默认配置训练的显存占用1.4 Model’s Operations1.5 Model’s Memory 二、梯度累积&#xff08;Gradient Accumulation&#xff09;2.1 批量大小2.2 梯度累积 三、梯度检查点&#xff08;Gradient Checkpointing&#xf…

8年经验的老程序员,告诉你如何看透面试、通过面试

关注公众号程序员小灰&#xff0c;不迷路&#xff01; 大家好&#xff0c;我是程序员小灰。小灰的公众号里有一位读者朋友鹤涵&#xff0c;是一个8年Java经验的资深程序员&#xff0c;并且当过多年面试官&#xff0c;面试过的人数超过百人。 今天&#xff0c;小灰特意把他邀请过…

优雅设计之美:实现Vue应用程序的时尚布局

前言 页面布局是减少代码重复和创建可维护且具有专业外观的应用程序的基本模式。如果使用的是Nuxt&#xff0c;则可以提供开箱即用的优雅解决方案。然而&#xff0c;令人遗憾的是&#xff0c;在Vue中&#xff0c;这些问题并未得到官方文档的解决。 经过多次尝试&#xff0c;小…

C# Onnx Dense Face 3D人脸重建,人脸Mesh

效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;namespace Onnx_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string fileFilter "*.…

随笔--解决ubuntu虚拟环境的依赖问题

文章目录 问题一&#xff1a;在conda虚拟环境中报错ImportError: libcupti.so.11.7:cannot open shared object file: No such file or directory解决步骤问题二&#xff1a; RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling cublasSgemmStridedBatched( …

打造高效运营底座,极智嘉一体化软件系统彰显科技威能

在仓储成本和物流需求日益增加的今天&#xff0c;创新且高效的物流机器人解决方案能够显著提升物流运营效率&#xff0c;降低物流成本&#xff0c;实现智能化、精益化、一体化的物流管理。全球仓储机器人引领者极智嘉(Geek)以「一套系统&#xff0c;天生全能」为准则&#xff0…

python 虚拟环境使用

创建虚拟环境 python -m -venv dir dir是要创建虚拟环境的目录,文件夹不存在会自动创建相关的文件夹及其父文件夹. 示例 python -m venv d:\pythonvenv\python3.11.5 这样会在d:\pythonvenv\python3.11.5 目录下创建一个虚拟环境 使用帮助: python -m -venv -h 使用虚拟…