理解通用引用和转发引用的概念
在 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中文网其他相关文章!