资讯专栏INFORMATION COLUMN

四、C++11新特性:追踪返回类型

tianyu / 1024人阅读

摘要:四追踪返回类型宋体声明该笔记是在学习深入理解高级编程程序库探秘时做的总结,方便以后巩固复习引入追踪返回类型的目的宋体追踪返回类型配合与会真正释放中泛型编程的能力简化函数的定义,提高代码的可读性。

四、追踪返回类型

声明:该笔记是在学习《深入理解C++11》、《C++11/14高级编程 Boost程序库探秘》时做的总结,方便以后巩固复习!

1、引入追踪返回类型的目的:

追踪返回类型配合autodecltype会真正释放C++11中泛型编程的能力;简化函数的定义,提高代码的可读性。

使用decltype对返回类型进行类型推导书写方式如下:

template<typename T1, typename T2>decltype(t1 + t2) Sum(T1 & t1, T2 & t2) { 	return t1 + t2;}

这样的写法虽然看似不错,不过对编译器来说有些小问题。编译器在推导decltype(t1 + t2)时的,表达
式中的t1t2都未声明;而变量使用前必须已经声明

为了解决变量使用前必须已经声明这个问题,C++11引入了新语法——追踪返回类型,来声明和定义这样的函数

template<typename T1, typename T2>auto Sum(T1 & t1, T2 & t2) -> decltype(t1 + t2){	return t1 + t2;}

把函数的返回值移至参数声明之后,复合符号-> decltype(t1 + t2)被称为追踪返回类型。而原本函数返回值的位置由auto关键字占据。这样,我们就可以让编译器来推导Sum函数模板的返回类型了。而auto占位符->return_type也就是构成追踪返回类型函数的两个基本元素。

2、使用追踪返回类型的函数

参数的类型和返回值都可在实例化时再确定

#include using namespace std;template<typename T1, typename T2>auto Sum(const T1 & t1, const T2 & t2) -> decltype(t1 + t2){	return t1 + t2;}template <typename T1, typename T2>auto Mul(const T1 & t1, const T2 & t2) -> decltype(t1 * t2){	return t1 * t2;}int main(){	auto a = 3;    auto b = 4L;    auto pi = 3.14;    auto c = Sum(a, b);    cout << "d = " << c << endl;       auto d = Mul(c, pi);    cout << "d = " << d << endl;   }        

输出:

d = 7d = 21.98

定义了两个模板函数Sum和Mul,它们的参数的类型和返回值都在实例化时决定。而由于main函数中还使用了auto,整个例子中没有看到一个“具体”的类型声明。
auto 会追踪 decltype() 推导出的类型。

可以关注公众号:Kevin的嵌入式学习站,整理不易,但您的点赞、关注、收藏就是对我最大的鼓励!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123612.html

相关文章

  • 追踪解析 ThreadPoolExecutor 源码

    摘要:的前位数用来表示线程的数量,后面三位用来表示线程池的状态。线程池的状态有五种,分别是,根据单词就能猜出大概。并且为了考虑性能问题,线程池的设计没有使用悲观锁关键字,而是大量使用了和机制。 零 前期准备 0 FBI WARNING 文章异常啰嗦且绕弯。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 2 ThreadPoolExecutor ...

    gaomysion 评论0 收藏0
  • 追踪解析 FutureTask 源码

    摘要:零前期准备文章异常啰嗦且绕弯。版本版本简介是中默认的实现类,常与结合进行多线程并发操作。所以方法的主体其实就是去唤醒被阻塞的线程。本文仅为个人的学习笔记,可能存在错误或者表述不清的地方,有缘补充 零 前期准备 0 FBI WARNING 文章异常啰嗦且绕弯。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 2 ThreadLocal 简介 ...

    xcc3641 评论0 收藏0
  • 为数据赋能:腾讯TDSQL分布式金融级数据库前沿技术

    摘要:年月日,腾讯团队为中国数据库技术大会带来了腾讯最新的数据库核心技术原创的全态数据的概念和基于历史态数据的可见性判断算法。腾讯专家工程师李海翔在上做了主题为为数据赋能腾讯分布式金融级数据库前沿技术的技术内容分享。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 简介:李海翔,网名那海蓝蓝,腾讯金融云数据库技术专家。中国人民大学信息学院工程硕士企业导师。著有《数据库事务处理的艺...

    Guakin_Huang 评论0 收藏0
  • Spring Cloud 参考文档(Spring Cloud Sleuth介绍)

    摘要:那个配置文件将来自应用程序的信息以格式记录到文件中。以下清单显示了使用的集成测试设置代码添加到项目本节介绍如何使用或将添加到项目中。以下示例显示了如何为执行此操作建议你通过添加依赖关系管理,这样你就无需自行管理版本。 Spring Cloud Sleuth介绍 Spring Cloud Sleuth为Spring Cloud实现了分布式追踪解决方案。 术语 Spring Cloud S...

    impig33 评论0 收藏0
  • ❤️ Go 有别于其他语言的九个特性 ❤️

    ? 博主简介:CSDN原力作者,华为云享专家,掘金优秀作者 ? 个人博客:haiyong.site ? 粉丝专属福利:简历模板、PPT模板、学习资料、面试题库。文末领取 直接跳到末尾领取资料 随着编程语言的发展,Go 还很年轻。它于 2009 年 11 月 10 日首次发布。其创建者Robert Griesemer Rob Pike 和 Ken Thompson在 Google 工作,在那里大规...

    _DangJin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<