C 中转发引用和右值引用共享相同语法的概念引起了开发人员的疑问。让我们深入研究这个决定背后的基本原理,并详细探讨语法。
转发引用(用 T&& 表示)和右值引用(也用 T&& 表示)不绑定到左值。但是,由相同语法表示的通用引用可以绑定到右值和左值。这种双重行为可能看起来令人困惑,所以让我们澄清一下底层机制。
通用引用,例如 T&&,能够将 T 推导出为“对象类型”或“引用类型”。当传递右值时,T 可以被推导为对象类型,从而产生 T&& 类型的函数参数。或者,当传递左值时,T 推导为引用类型,根据引用折叠规则有效折叠为 T&。
此行为与模板参数推导和引用折叠规则无缝集成,有一个小例外:现在可以将模板参数推导为引用类型。通用引用的语法与这种推导机制一致,允许跨模板和语言的其余部分实现一致的类型系统。
C 委员会仔细考虑了替代语法,但最终决定不使用它们。考虑了诸如 T&&&&&&、T*&、T@ 和 T&42 之类的提案,但它们被认为是不必要的,并且可能更令人困惑。
通用引用的语法 T&& 确保与引用折叠规则的兼容性,提供语法上的处理对象类型和引用类型的一致方式。通过使用相同的语法来转发引用和右值引用,该语言保持了简单性并最大限度地减少了混乱。
以上是为什么 C 转发引用和右值引用共享相同的语法?的详细内容。更多信息请关注PHP中文网其他相关文章!