前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >类型推导的一二件事

类型推导的一二件事

作者头像
用户11173787
发布2024-10-07 07:54:25
820
发布2024-10-07 07:54:25
举报
文章被收录于专栏:破晓

引言

类型推导不是重点内容,大家知道类型推导是怎么个事即可!

什么是类型推导

想必大家都用过auto这个非常受欢迎的关键字吧,「通常情况下,遇到类型复杂的变量,直接无脑auto」。

百度百科关于auto的介绍如下: 在C++中,auto关键字用于自动类型推断。它允许编译器根据初始化表达式自动推断变量的类型,从而使得代码更加简洁和易于维护。auto的使用场景包括但不限于循环中的迭代器、复杂类型(如std::map、std::vector等容器的元素类型)的声明,以及函数返回类型推导(在C++11之后的版本中)。

但是有时候我们也有推导出该变量是什么类型的需求。推导的过程就是类型推导 如下:

代码语言:javascript
复制
int main()
{
	auto it = [](int a, int b)->int {return a + b; };
	cout<<typeid(it).name();
}

运行结果如下:

其中我们用到了一个函数:typeid

下面👇我们有必要好好介绍一下typeid 在C++中,typeid是一个运算符,用于获取一个表达式的类型信息。它返回一个std::type_info对象,该对象包含有关该表达式的类型信息。typeid通常与auto关键字结合使用时,可以帮助开发者在运行时确定由auto推导出的变量的具体类型。

typeid的基本用法 typeid运算符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义)。type_info类提供了一个成员函数name(),它返回一个C风格的字符串,用来表示相应的类型名。但需要注意的是,这个返回的类型名与程序中使用的相应类型名并不一定一致,具体格式可能因编译器而异。

类型推导和函数模板相结合

前面文章中,我们介绍了函数模板和类模板,今天我们将函数模板和类型推导结合起来

没有提供任何特例化的模板
代码语言:javascript
复制
template<class T>
void func1(T a)
{
	cout << typeid(T).name() << endl;
}

我们用一个函数试一下,看看是可以推导出来该函数的返回值类型和参数类型。

代码语言:javascript
复制
int sum(int a, int b)
{
	return a + b;
}
int main()
{
	func1(sum);
}

结果如下:

运行结果
运行结果

但是这个结果力度太大,我就行推导出返回值类型就可以了,解决方案就是部分特例化模板。

部分特例化模板

针对需求,我们可以这样做:

代码语言:javascript
复制
template<class R,class A1,class A2>
void func2(R(*a)(A1, A2))
{
	cout << typeid(R).name() << endl;
	cout << typeid(A1).name() << endl;
	cout << typeid(A2).name() << endl;

}

借用上面👆的代码检验一下是否可以推导成功

Nice,结果正确,成功推出!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 什么是类型推导
  • 类型推导和函数模板相结合
    • 没有提供任何特例化的模板
      • 部分特例化模板
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档