C++ 泛编程—— 自动推导类型 auto

ops/2024/12/14 4:32:31/

C++ 自动推导类型 auto

  • 自动推导类型
  • 函数模板
  • 类模板

C++泛编程,也叫通用编程。包括三方面内容: 自动推导类型函数模板类模板

自动推导类型

C++11中,赋予了auto全新的含义,不再用于修饰变量,而是作为一个类型指示符指示编译器在编译时推导auto声明的变量的数据类型。
语法:auto 变量名 = 初始值

#include <iostream>using namespace std;int main() {int n1 = 123; cout << "n1 = " << n1 << endl;auto n2 = 123; cout << "n2 = " << n2 << endl;double d1 = 123.456; cout << "d1 = " << d1 << endl;auto d2 = 123.456; cout << "d2 = " << d2 << endl;string s1 = "Hello, World!"; cout << "s1 = " << s1 << endl;auto s2 = "Hello, World!"; cout << "s2 = " << s2 << endl;return 0;
}

编译器会根据等号右边的数据,自动推导出变量的数据类型。编译运行结果如下:

n1 = 123
n2 = 123
d1 = 123.456
d2 = 123.456
s1 = Hello, World!
s2 = Hello, World!

注意

  • auto声明的变量必须在定义时初始化。没有定义的话,那什么来推导?
  • 初始化的右值可以是具体的数值,也可以是表达式函数返回值等。
  • auto不能作为函数的形参类型。
  • auto不能直接声明数组。
  • auto不能定义类的非静态成员变量。
#include <iostream>         // 包含头文件。
using namespace std;        // 指定缺省的命名空间。double func(double n1, const char* n2, float n3, short n4, long n5)
{cout << "n1 = " << n1 << ", n2 = " << n2 << ", n3 = " << n3 << ", n4 = " << n4 << ", n5 = " << n5 << endl;return 1.2345;
}int main()
{// 声明函数指针 方法1double (*pf_1)( double , const char* , float , short , long );    // 声明函数指针pf。pf_1 = func; // 函数指针pf指向func函数pf_1(1.2345, "abcd", 3, 4, 5);// 声明函数指针 方法2auto pf_2 = func;pf_2(2.222, "aaaaa", 222, 222, 222);
}

编译运行结果如下:

n1 = 1.2345, n2 = abcd, n3 = 3, n4 = 4, n5 = 5
n1 = 2.222, n2 = aaaaa, n3 = 222, n4 = 222, n5 = 222

不要滥用autoauto在编程时真正的用途如下:

  • 代替冗长复杂的变量声明(两种方法声明函数指针,方法2代码少)
  • 在模板中,用于声明依赖模板参数的变量。
  • 函数模板依赖模板参数的返回值
  • 用于lambda表达式中

函数模板

链接:C++ 泛编程 —— 函数模版(上)
链接:C++ 泛编程 —— 函数模版(中)
链接:C++ 泛编程 —— 函数模版(下)

类模板

链接:C++ 泛编程 —— 类模版(上)
未完待续

感谢浏览,一起学习


http://www.ppmy.cn/ops/141720.html

相关文章

vue2实现在el-table里修改数据,插入输入框,并且根据输入数据,影响该行其他关联数据

<div class"content-all"><div class"content-tit">填写内容</div><div class"content-text"><el-radio v-model"radio" label"1">计划负荷</el-radio><el-radio v-model"radi…

Horovod:分布式深度学习训练库;Horovod库中DistributedOptimizer

目录 Horovod:分布式深度学习训练库 环境准备 代码示例 运行脚本 Horovod库中DistributedOptimizer DistributedOptimizer的作用 举例说明 Horovod:分布式深度学习训练库 Horovod是一个开源的分布式深度学习训练库,它能够在多个节点(机器)和多个GPU上高效地并行运行…

信创国产化时代:打造安全高效的信创网站解决方案

在全球科技竞争日益激烈的背景下&#xff0c;信创国产化已经成为中国信息技术领域的重要战略选择。信创国产化&#xff0c;即信息技术应用创新与国产化&#xff0c;旨在通过自主研发和创新&#xff0c;推动核心技术的国产化&#xff0c;减少对外部技术的依赖&#xff0c;确保国…

ESlint代码规范,手动与自动修复

规范说明 规则参考 - ESLint - 插件化的 JavaScript 代码检查工具 规范说明 ​ ​ 可看到是main.js文件报错分别是第三行第30个字符&#xff0c;以及第七行第一个字符 后面则是规范说明&#xff0c;可以根据说明查找相应的规范 一.手动修正 ctrl f 可以搜索 二.自动修正 …

动态规划 —— 子数组系列-环形子数组的最大和

江河入海&#xff0c;知识涌动&#xff0c;这是我参与江海计划的第7篇。 1. 环形子数组的最大和 题目链接&#xff1a; 918. 环形子数组的最大和 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/maximum-sum-circular-subarray/description/ 2. 题目解析…

单体到微服务:电商平台架构的演变与可扩展性探索

目录 一、整体理解可扩展性 二、从电商平台架构发展看架构的可扩展性 &#xff08;一&#xff09;单体架构 &#xff08;二&#xff09;分布式架构 &#xff08;三&#xff09;SOA架构 &#xff08;四&#xff09;微服务架构 三、1号店App服务端架构升级说明 &#xff…

MBox20网关助力汽车零部件企业实现与效率飞跃

背景概述 该企业为一家深耕汽车零部件制造的传统企业&#xff0c;拥有高效运作的自动化生产线体系&#xff0c;专注于汽车发动机零部件的生产制造。然而&#xff0c;面对市场需求的瞬息万变及消费者个性化需求的日益凸显&#xff0c;该企业正遭遇生产效率瓶颈、质量控制挑战、…

【漏洞复现】Apache Solr 身份认证绕过导致任意文件读取漏洞复现(CVE-2024-45216)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 【漏洞复现】Apache Solr 身份认证绕过导致任意文件读取漏洞复现(CVE-2024-45216) 一、漏洞概述1.1漏洞简介1.2组件描述1.3漏洞描述二、漏洞复现2.1 应用协议2.2 环境…