首页 >后端开发 >C++ >为什么我不能使用非常量引用来绑定 C 中的临时对象?

为什么我不能使用非常量引用来绑定 C 中的临时对象?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-25 03:26:27717浏览

Why Can't I Use a Non-Const Reference to Bind a Temporary Object in C  ?

为什么不是对临时对象的非常量引用?

在 C 中,在表达式期间创建的临时对象只能分配给 const 引用,而不能分配给非常量引用参考。这引发了人们对该限制背后的基本原理的质疑。

传统的解释是基于修改临时对象的潜在危险。如果允许对临时对象进行非常量引用,则可能会无意中对其进行修改,从而导致不可预测的后果。然而,批评者认为从临时对象中读取同样有风险,也应该受到限制。

要理解这种区别,请考虑以下示例:

String& a = String("test");         // Error
const String& a = String("test");   // Ok

第一行是一个错误,而第二行有效。这表明 C 不关心读取临时对象。那么,为什么禁止写入?

答案在于 C 的一个基本方面:函数参数。如果允许对临时对象进行非常量引用,则在将临时对象传递给接受引用的函数时会产生歧义。例如:

void inc(double& x)
{
    x += 0.1;
}

int i = 0;
inc(i);

在此示例中,当 i 传递给 inc() 时,不清楚是否有意引用 i 或是否应创建 i 的临时副本。这种歧义可能会导致微妙的错误。

通过禁止对临时对象的非常量引用,C 确保函数参数始终引用左值(非临时对象)。这消除了混淆的可能性并提高了代码清晰度。

以上是为什么我不能使用非常量引用来绑定 C 中的临时对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

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