文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++11中如何使用forward函数

2023-06-19 11:02

关注

本篇文章给大家分享的是有关C++11中如何使用forward函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

传值函数模板

假设有一组函数,根据两个输入值进行工作,例如下面的add函数:

C++11中如何使用forward函数

我们希望编写一个函数模板来调用这些函数。

C++11中如何使用forward函数

这个函数模板的使用方法如下:

C++11中如何使用forward函数

程序员可以根据需要,修改函数名参数和两个变量的类型。到目前为止算是准备活动。

左值引用参数函数模板

除了像add函数那样,两个参数都作为输入的函数以外,也许还希望调用这样的函数:

C++11中如何使用forward函数

在这些函数中,希望将通过引用类型将运算结果输出。这种情况下可以按一下方式定义函数模板:

C++11中如何使用forward函数

函数模板2的使用方法如下:

C++11中如何使用forward函数

这个函数模板可以使用add和inc两种形式的函数。但是还有一个小问题:没有办法像第一种情况那样使用常数作为参数,因为常数是一个右值。

右值引用参数函数模板

为了解决左值引用参数模板的问题,可以定义右值引用参数函数模板。

C++11中如何使用forward函数

有了这个模板之后,下面的代码都可以正常编译执行。

C++11中如何使用forward函数

在输入参数的地方,指定常数也没有问题。已经很不错了。

前进中的问题

如果我们想这个模板函数调用下面的函数呢?

C++11中如何使用forward函数

下面的代码是没有办法通过编译的。

C++11中如何使用forward函数

编译错误为在调用swap_rvalue时int无法转换为int&&类型。

发生了什么

为了弄清楚函数模板内部的情况,作者编写了下面的函数:

C++11中如何使用forward函数

这的函数的功能是为了是取得本文中提到的类型T的实际类型。虽然并不完整,但是可以用来说明本文中遇到的问题。这个函数可以这样使用:

C++11中如何使用forward函数

输出结果如下:

C++11中如何使用forward函数

它正确的输出了,int,int&和int&&的类型。我们可以吧showType嵌入到函数模板中:

C++11中如何使用forward函数

为了回避编译错误,暂且屏蔽调用函数的部分。模板函数的输出结果为:

C++11中如何使用forward函数

由于发生了上一篇文章中说明的引用合并,T1,T2的类型分别变成了右值。这就是调用swap_int失败的原因。

C++11的解决方式

为了解决模板函数中参数类型变化的问题,C++11中可以使用std::forward来恢复模板参数的左值或右值属性。修改后的代码如下:

C++11中如何使用forward函数

在调用f之前,另外增加了两行代码以表示std::foward的执行结果。程序输出如下:

C++11中如何使用forward函数

可以看到,调用时的类型被成功恢复,swap_int函数也被正确的执行了。不仅如此,下面的代码都能正确执行。

C++11中如何使用forward函数

以上就是C++11中如何使用forward函数,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯