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.mfbz.cn/a/571303.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

日本岛津电子天平UW UX 系列series 精密电子天平Shimadzu使用说明

日本岛津电子天平UW UX 系列series 精密电子天平Shimadzu使用说明

2024春季春日主题活动策划方案

2024解冻派对“春日浪漫”主题活动策划方案-32P 方案页码&#xff1a;32页 文件格式&#xff1a;pptx 方案简介&#xff1a; 春来一季&#xff0c;新生欢喜 花香丨微风丨阳光 活动唤起【春日浪漫记忆】&#xff01; 年轻人不一样的派对活动 可以与朋友/小朋友/家人互动…

MT3030 天梯赛

跟MT3029战神小码哥类似&#xff0c;都是贪心堆。注意开long long 这里的堆顶为战斗力最小的&#xff0c;便于贪心的反悔操作。先按容忍度从大到小排序&#xff08;q中总容忍度取决于最小的容忍度&#xff09;&#xff0c;再向q中存数&#xff0c;存到不能容忍之后再把堆顶踢出…

最简单也最复杂的德语动词,柯桥德语培训

德语人一定遇到过这个难题&#xff1a;ie组合到底发什么音&#xff1f; 说起haben&#xff0c;大家可能第一感觉是“这么简单的动词也要讲&#xff1f;不就是‘拥有’的意思吗&#xff1f;” 没错&#xff0c;haben的基本含义是“拥有&#xff0c;包含”&#xff0c;但是在某些…

Vue3后台管理系统推荐

目录 项目概述 &#x1f35f; 项目展示 功能特点 &#x1f957; 结语 &#x1f4a8; 项目概述 &#x1f35f; 基于Vue 3框架与Element-Plus UI组件库技术精心构建的后端管理模板。该模板系统已成功实现一个基础的权限管理模块&#xff0c;宗旨在于为追求高效二次开发的开发…

制作一个RISC-V的操作系统十四-任务同步和锁

文章目录 并发与同步临界区和锁锁死锁解决死锁自旋锁&#xff08;spin lock&#xff09;原子性问题原子操作实现amoswap.w.aq例子 另一种方法自旋锁的注意事项代码其他同步技术 并发与同步 控制流&#xff1a;可理解为任务或进程 中断也可以理解为一个切换到另一个任务&#…

【Linux网络】DHCP原理与配置

目录 一、DHCP工作原理 1.了解DHCP服务 2.使用DHCP的好处 3.DHCP的分配方式 二、DHCP的租约过程 三、DHCP场景应用实验 一、DHCP工作原理 1.了解DHCP服务 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09; 由Internet工作…

<计算机网络自顶向下> 无连接传输UDP

UDP&#xff1a;User Datagram Protocol “尽力而为”的服务 报文可能丢掉或者乱序好处&#xff1a; 效率高&#xff08;不建立连接无拥塞控制和流量控制【应用->传输的速率主机->网络的速率】&#xff09;报文段的头部很小&#xff08;开销小&#xff09;UDP被用于 流媒…

数据结构系列-堆排序当中的T-TOK问题

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 之前我们讲到了堆排序的实现逻辑&#xff0c;那么接下来我们重点关注的就是其中的T-TOK问题 T-TOK说简单点&#xff0c;就是说&#xff0c;假如有10000个数据&#xff08;随机的…

bottle,Python轻量级的Web框架!

目录 前言 安装 特性 基本功能 1. 路由功能 2. 请求参数获取 3. 静态文件服务 4. 模板渲染 高级功能 1. 中间件 2. 插件 3. 异步处理 实际应用场景 1. 小型Web应用 2. RESTful API服务 3. Web界面与后端逻辑分离 4. Web服务的快速原型开发 总结 前言 大家好&#xff0c…

YOLOv9改进策略 | 添加注意力篇 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)

一、本文介绍 本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制&#xff0c;它通过三个不同的视角来分析输入的数据&#xff0c;就好比三个人从不同的角度来观察同一幅画&#xff0c;然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入…

解密数字经济时代,元宇宙企业如何重塑商业价值?

从复盘中感知自我&#xff0c;坚持和过去对话&#xff0c;并引入未来的思考&#xff0c;飞天云动是一个典型的案例。 在科技的飞速发展和数字化浪潮的推动下&#xff0c;元宇宙这一概念如同一颗冉冉升起的新星&#xff0c;吸引了全球的目光。就目前而言&#xff0c;围绕元宇宙…

Ubuntu终端自动补全

文章目录 前言配置安装zsh安装 oh-my-zsh安装自动补全插件zsh-autosuggestions 参考 前言 Oh My Zsh 是一个针对命令行 shell 的开源框架&#xff0c;主要用于增强和美化命令行环境。它建立在 Zsh&#xff08;一种强大的 shell 替代品&#xff09;之上&#xff0c;提供了丰富的…

CountDownLatch

什么是CountDownLatch&#xff1a; CountDownLactch是一个同步工具类&#xff0c;用来协调线程之间的同步&#xff0c;其初始值是一个计数器&#xff0c;为线程的数量&#xff0c;当计时器的值为0时&#xff0c;代表此时所有线程的工作全部已经完成 常用方法&#xff1a; 1.cou…

33 信号产生

目录 1.键盘信号 2.显示器回显过程 3.信号产生方式 4.总结 键盘信号 键盘数据是如何输入给内核的&#xff0c;crtlc是怎么变成信号的&#xff1f; 键盘被按下&#xff0c;肯定是os先知道&#xff0c;os怎么知道键盘上有数据呢&#xff1f; c让操作系统每隔一段时间去轮询每…

Linux中Ctrl+C和Ctrl+Z的区别_实战讲解(超详细)

1、CtrlC和CtrlZ的区别&#xff1a; CtrlZ&#xff1a;暂停进程 即挂起进程 暂停当前进程并将其放到后台。可以在后续恢复执行。 暂停的进程仍然占用系统内存 CtrlC&#xff1a;终止进程 终止进程后&#xff0c;程序代码占用的内存会释放掉 2、实战讲解 跑人工智能代码的时候…

10.Java集合汇总

文章目录 1. Java集合概述1.1 Java集合框架概述1.2 Collection接口继承树1.3 Map接口继承树 2. Collection接口2.1 Collection接口方法 3 Iterator迭代器接口3.1 Iterator接口的方法3.2 foreach循环 4 List接口4.1 List接口方法4.1 ArrayList4.2 LinkedList4.3 Vector4.4 面试题…

如何通过大带宽优化美国站群服务器的全球访问速度?

如何通过大带宽优化美国站群服务器的全球访问速度? 在当今全球化的互联网时代&#xff0c;快速和稳定的网站访问对于企业至关重要。美国站群服务器因其地理位置和强大的网络基础设施而备受青睐&#xff0c;但要充分利用其优势&#xff0c;需要综合考虑多种因素。本文将探讨如…

233 基于matlab的多通道非负矩阵分解(MNMF)算法

基于matlab的多通道非负矩阵分解&#xff08;MNMF&#xff09;算法。其能够寻找到一个非负矩阵W和一个非负矩阵H&#xff0c;满足条件VW*H,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。使用EM准则对混合信号进行分解。程序已调通&#xff0c;可直接运行。 233 多通道非…