为什么右值和通用引用共享语法
在 C 中,右值和通用引用共享相同的语法,用 T&& 表示。 。这种选择引发了有关潜在混淆和替代语法可能性的问题。
右值引用
右值引用用于表示对右值的不可修改引用(右值)表达式。它们防止左值(左值)绑定到引用,如下所示:
<code class="cpp">void foo(int&& a); int i = 42; foo(i); // error</code>
通用引用
相反,通用引用可以绑定到右值和左值。这是通过模板参数推导和引用折叠规则来实现的。考虑以下示例:
<code class="cpp">template<typename T> void bar(T&& b); bar(i); // okay</code>
在 bar 函数中,模板参数 T 在传递右值时可以推导为 int,从而得到 int&& 的函数参数。类似地,当传递左值时,T 可以被推导为 int&,从而得到 int& 的函数参数。
共享语法的原因
共享背后的原理右值和通用引用的语法相同,因为它们遵循相同的参数推导和引用折叠规则。这种一致性允许在模板中无缝集成转发引用(完美转发)。
如果采用替代语法,例如 T&&&、T&* 或 T@,则会引入额外的复杂性进入语言。此外,这些替代符号需要引入新的语法规则,这些规则带来了自身的挑战和潜在的歧义。
拒绝替代语法
C 委员会考虑了替代语法,但最终因以下原因而拒绝它们:
总之,右值和通用引用之间的共享语法提供了一种干净且一致的处理方法在 C 中转发引用和右值语义。与引用折叠规则的一致性消除了对单独语法的需要,并保持了语言类型系统的完整性。
以上是为什么 C 对右值引用和通用引用使用相同的语法?的详细内容。更多信息请关注PHP中文网其他相关文章!