首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通用引用和转发引用之间有区别吗?

通用引用和转发引用之间有区别吗?
EN

Stack Overflow用户
提问于 2016-09-18 06:24:44
回答 2查看 20.3K关注 0票数 62

此函数的参数将绑定到右值引用:

代码语言:javascript
运行
复制
void f(int && i);

但是,此函数的参数将绑定到右值或左值引用:

代码语言:javascript
运行
复制
template <typename T>  
void f(T && t);

我经常听说这是一个通用的参考。

我还听说它被称为转发参考。

它们的意思是一样的吗?

如果函数体调用std::forward,它是否只是一个转发引用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-18 06:34:25

它们的意思是一样的吗?

Universal reference是Scott Meyer创造的一个术语,用于描述对cv非限定模板参数进行右值引用的概念,然后可以将其推导为值或左值引用。

当时,C++标准没有专门的术语来描述这一点,这是C++11中的一个疏忽,使得教学变得困难。N4164纠正了这一疏忽,它向[temp.deduct]添加了以下定义

转发引用是对cv未限定模板参数的右值引用。如果P是转发引用,而参数是左值,则使用“左值对A的引用”类型代替A进行类型推导。

因此,这两者的含义是一样的,并且当前的C++标准术语是转发引用。这篇论文本身阐明了为什么“转发参考”是一个比“通用参考”更好的术语。

如果函数体调用std::forward

是否只是一个转发引用?

不,你对转发引用做了什么与名字无关。概念转发引用只是指类型T是如何在中推导出来的:

代码语言:javascript
运行
复制
template <class T> void foo(T&& ); // <== 

它不需要随后转发。

票数 72
EN

Stack Overflow用户

发布于 2016-09-18 06:32:20

不幸的是,这很令人困惑,但它们只不过是同一事物的两个名称。

通用参考( Universal reference )是Meyer很久以前提出的(我猜是这样的)(例如here )。

转发引用是直接从标准代码中提取的。就这样。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39552272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档