首页  >  文章  >  后端开发  >  C 中的通用引用和转发引用有什么区别?

C 中的通用引用和转发引用有什么区别?

Patricia Arquette
Patricia Arquette原创
2024-11-10 12:53:02491浏览

What is the Difference Between Universal References and Forwarding References in C  ?

理解通用引用和转发引用的概念

在 C 中,通用引用和转发引用之间的区别可能会令人困惑。虽然这两个术语指的是相同的概念,但它们的精确定义随着时间的推移而演变。

在 C 11 中,引入了术语“通用引用”来描述模板参数接受右值和左值引用的能力。这是通过使用对 cv 不合格模板参数的右值引用来实现的。

但是,随着 C 14 的引入,采用了更精确的术语:“转发引用”。根据 C 14 标准中的定义,转发引用是“对 cv 不合格模板参数的右值引用。”

主要区别

通用和通用之间的主要区别转发引用在于它们的语义。虽然两者都接受右值和左值引用,但标准澄清,对于转发引用,如果参数是左值,则为给定参数推导的类型是“对 A 的左值引用”。

转发

需要注意的是,术语“转发引用”并不意味着在函数体内使用 std::forward 函数。转发方面仅指类型推导过程。随后是否转发引用无关紧要。

示例

考虑以下函数模板:

template<typename A>
void foo(A&& a) {
  // Forwarding does not occur here
}

在此示例中,参数a的类型是转发引用。如果左值作为参数传递给该函数,则 a 的类型将被推导为“对 A 的左值引用”。但函数体不进行任何转发。

以上是C 中的通用引用和转发引用有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn