在 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中文网其他相关文章!