auto关键字的妙用

基本概念

C++11中的auto关键字是C++语言的一个重大改进,它提供了一种类型推导的机制,允许开发者让编译器自动推导变量的类型,从而简化代码并提高可读性。

常见使用场景

1、循环中迭代变量的类型推导

当处理容器或其他迭代器时,auto可以减少冗余的类型声明,使代码更加简洁。

使用auto前

    std::vector<int> vec = {1, 2, 3, 4, 5};std::vector<int>::iterator it = vec.begin();for(; it != vec.end(); ++it){std::cout << *it << " ";}

使用auto后

    std::vector<int> vec = {1, 2, 3, 4, 5};for (auto it1 = vec.begin(); it1 != vec.end(); ++it1) {std::cout << *it1 << " ";}

2、复杂类型初始化

对于复杂类型,如函数指针、模板类型等,使用auto可以让代码更加清晰。

使用auto前

	int (*func)(int, int) = [](int a, int b) { return a + b; };std::cout << "Result of lambda: " << func(10, 20) << std::endl;

使用auto后

    // 使用auto简化复杂类型声明auto lambda = [](int a, int b) { return a + b; };std::cout << "Result of lambda: " << lambda(10, 20) << std::endl;

3、与C++11新特性结合使用

auto可以与std::tuplestd::function等C++11引入的类型结合使用,简化模板编程。

使用auto前

	std::tuple<int, double, std::string> myTuple2(1, 2.0, "three");std::cout << "Tuple elements: " << std::get<0>(myTuple2) << ", " << std::get<1>(myTuple2) << ", " << std::get<2>(myTuple2) << std::endl;

使用auto后

    // 使用auto与std::tuple结合auto myTuple = std::make_tuple(1, 2.0, "three");std::cout << "Tuple elements: " << std::get<0>(myTuple) << ", "<< std::get<1>(myTuple) << ", " << std::get<2>(myTuple) << std::endl;

4、根据初始化推断简单变量类型

auto x = 10; // x的类型被推断为int
auto y = 3.14; // y的类型被推断为double

然而,这种使用auto也可能会导致代码的可读性降低,尤其是当初始化表达式的类型不是很容易理解时。因此,在使用auto时,最好保持代码的清晰和可读性,以上写法不太建议。

完整示例demo

#include <iostream>
#include <vector>
#include <tuple>int main() {// 使用auto推导迭代器类型std::vector<int> vec = {1, 2, 3, 4, 5};std::vector<int>::iterator it = vec.begin();for(; it != vec.end(); ++it){std::cout << *it << " ";}std::cout << std::endl;for (auto it1 = vec.begin(); it1 != vec.end(); ++it1) {std::cout << *it1 << " ";}std::cout << std::endl;for(auto it2 : vec){std::cout << it2 << " ";}std::cout << std::endl;// 使用auto简化复杂类型声明auto lambda = [](int a, int b) { return a + b; };std::cout << "Result of lambda: " << lambda(10, 20) << std::endl;int (*func)(int, int) = [](int a, int b) { return a + b; };std::cout << "Result of lambda: " << func(10, 20) << std::endl;// 使用auto与std::tuple结合auto myTuple = std::make_tuple(1, 2.0, "three");std::cout << "Tuple elements: " << std::get<0>(myTuple) << ", "<< std::get<1>(myTuple) << ", " << std::get<2>(myTuple) << std::endl;std::tuple<int, double, std::string> myTuple2(1, 2.0, "three");std::cout << "Tuple elements: " << std::get<0>(myTuple2) << ", " << std::get<1>(myTuple2) << ", " << std::get<2>(myTuple2) << std::endl;return 0;
}

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

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

相关文章

学习c语音的自我感受

因为是自学&#xff0c;所以走过不少弯路。去年&#xff0c;受知乎“python性能弱”风潮的影响&#xff0c;学过go,rust。 在学习这些新语言的时候&#xff0c;由衷感受到&#xff0c;或是本身侧重方向的原因&#xff08;如go侧重服务器&#xff09;&#xff0c;或是语言太新不…

uniapp——组件多颜色模块展示、气泡框

一、自定义颜色&#xff1a; 样式 代码 <template><view class"content"><!-- 右上角 --><view class"coverStatus" :class"[itemClass, positionClass,cornerClass,sanJiaoCss,sanJiaoCss2]":style"dynamicStyle&q…

python getsize如何使用

第一步&#xff0c;点击键盘 winr&#xff0c;打开运行窗口&#xff1b;在窗口中输入“cmd"&#xff0c;点击确定&#xff0c;打开windows命令行窗口。 第二步&#xff0c;在windows命令行窗口中&#xff0c;输入“python”&#xff0c;进入python交互窗口。 第三步&#…

【Linux】解决切换用户出现bash-4.2$问题

切换用户出现 bash 4.2 问题 出现 bash 4.2 错误 发现是用户指定家目录下 缺少2个隐藏文件 这题前提条件 我指定的家目录是 /opt/{孙悟空,猪八戒,唐僧,沙悟净} /etc/skel/.bashrc /etc/skel/.bash_profile 传过去后显示登录成功 问题展示&#xff1a; [rootlocalhost…

前端系列-2 模块化CommonJs+AMD+CMD+ES6

模块化 js中, 一个文件就是一个模块&#xff0c;模块化可以提高代码利用率而减少重复代码&#xff0c;将相同的逻辑维护在一个模块中&#xff0c;分而治之&#xff0c;提高代码的可维护性&#xff1b;另外&#xff0c;模块化的出现可以在工程中引入第三方模块&#xff0c;极大…

揭秘油烟净化器保持餐饮厨房清新通畅的秘诀

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 在餐饮厨房中&#xff0c;油烟净化器的作用不可忽视。它不仅是清洁空气的工具&#xff0c;更是提升生活品质的保障。让我们一…

音频数据分析注意事项

注意事项一、音频读取 1.librosa.load(path, sr16000) 读取的结果是&#xff0c;数据类型是浮点型 2.df_yin wave.open(path, rb) params df_yin.getparams() nchannels, sampwidth, framerate, nframes params[:4] strData df_yin.readframes(nframes) data np.frombuf…

笔记 | 嵌入式系统概论

1 嵌入式系统简介 1.1 嵌入式系统的定义 根据美国电气与电子工程师学会&#xff08;IEEE&#xff1a;Institute of Electrical and Electronics Engineers )的定义&#xff0c;嵌入式系统是用于控制、监视或辅助操作机器和设备的装置(原文: devices used to control, monitor…

WiFi、Ethenet、4G优先级切换

1、多网卡情况下如何调整优先级方案 按照目前公司前辈给出的方案&#xff0c;调整优先级的手段有两种&#xff1a; <1>.删除默认路由--route del 的方法 <2>.ifmetric源码提供的修改路由表的mteric的值来设置路由的优先级&#xff0c;metric越小优先级越高。 应…

ANSYS Help 的使用

ANSYS 帮助文档是相当实用且重要的第一手资料&#xff0c;90% 以上的纯操作问题都可以在帮助文档找到相关的解释。 点击开始菜单的 ANSYS Help即可打开帮助文档 帮助文档有两种打开方式&#xff1a; 基于帮助文档的安装包安装于本地后&#xff0c;可直接启动帮助程序没有安装…

Spring-IOC之组件扫描

版本 Spring Framework 6.0.9​ 1. 前言 通过自动扫描&#xff0c;Spring 会自动从扫描指定的包及其子包下的所有类&#xff0c;并根据类上的特定注解将该类装配到容器中&#xff0c;而无需在 XML 配置文件或 Java 配置类中逐一声明每一个 Bean。 支持的注解 Spring 支持一系…

书生·浦语大模型实战营之Llama 3 高效部署实践(LMDeploy 版)

书生浦语大模型实战营之Llama 3 高效部署实践&#xff08;LMDeploy 版&#xff09; 环境&#xff0c;模型准备LMDeploy chatTurmind和Transformer的速度对比LMDeploy模型量化(lite)LMDeploy服务(serve) 环境&#xff0c;模型准备 InternStudio 可以直接使用 studio-conda -t …

机器学习运用-民宿价格

项目简介 随着旅游业的蓬勃发展&#xff0c;民宿市场迎来了前所未有的增长机遇。正好最近在参加拓尔思数据挖掘公益实习活动&#xff0c;我的项目将应用机器学习技术开发一个价格预测模型。可以达到更好地理解和预测民宿价格的目的&#xff0c;该模型综合考虑了从容纳人数、便…

【Python】Python函数的黑魔法:递归,嵌套函数与装饰器

欢迎来到CILMY23的博客 本篇主题为&#xff1a; Python函数的黑魔法&#xff1a;递归&#xff0c;嵌套函数与装饰器 个人主页&#xff1a;CILMY23-CSDN博客 系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 感谢观看&#xff0c;支持的可以给个一键三连&#xff…

基于51单片机的矩阵按键扫描的proteus仿真

文章目录 一、按键按键按键消抖 二、独立按键仿真图仿真程序 三、矩阵按键仿真图仿真程序 四、总结 一、按键 按键 按键通常指的是电子设备上的一种输入装置&#xff0c;用于在按下时发送信号&#xff0c;以便设备执行相应的操作。按键可以分为独立按键和矩阵按键两种类型。 …

TRIZ理论下攀爬机器人的创新设计与研究

随着科技的飞速发展&#xff0c;机器人技术已广泛应用于各个领域。特别是在复杂环境下的作业&#xff0c;如灾难救援、太空探测等&#xff0c;对机器人的移动能力和适应性提出了更高要求。在这样的背景下&#xff0c;基于TRIZ理论的攀爬机器人设计与研究应运而生&#xff0c;它…

代码随想录三刷day46

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣035. 不相交的线二、力扣53. 最大子数组和三、力扣392. 判断子序列 前言 每次当初始化的时候&#xff0c;都要回顾一下dp[i][j]的定义&#xff0c;不要…

简单的图像处理算法

本笔记参考crazy_Bingo 基础&#xff1a; 图像处理都是用卷积矩阵对图像卷积计算&#xff0c;如3X3 的矩阵对640 X 480分辨率的图像卷积&#xff0c;最终会得到638 X 478 的图像。卷积过程是这样的&#xff1a; 一、中值滤波 &#xff1a; 找出矩阵中的最中间值作为像素点 中…

Flink的安装、项目创建、任务打包和部署完整实现,任务实现使用JAVA语言

Flink资源下载地址 Flink安装包下载地址 一、本地模式安装Flink 1、在Linux服务上&#xff0c;创建flink文件夹 mkdir flink 2、上传文件并解压 tar -zxvf flink-1.14.6-bin-scala_2.11.tgz 解压完成后&#xff0c;如图&#xff1a; 3、启动Flink 进入到解压目录下&#x…

樱花下落的速度(区间放缩,思维)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 已知一朵樱花有 n 枚花瓣&#xff0c;每一枚花瓣各不相同。将它们用一个长为 n 的排列编号。 我们根据一朵樱花的编号来认定它的特征&#xff1a; 每一个排列均具有两组特征码 fa&#xff0c;f…