首页 >后端开发 >C++ >为什么非常量左值引用不能绑定到 C 中的临时变量?

为什么非常量左值引用不能绑定到 C 中的临时变量?

Patricia Arquette
Patricia Arquette原创
2024-12-06 14:20:131024浏览

Why Can't Non-Const Lvalue References Bind to Temporaries in C  ?

非常量左值引用和临时绑定

在 C 中,非常量左值引用应该绑定到相同或相同的左值派生类型。但是,某些情况(例如绑定到临时对象)可能会导致错误。

为什么以下代码有效?

int a;
const double &m = a;

在这种情况下,引用绑定到左值,并且由于引用是 const,因此无法修改左值。只要类型兼容,这在 C 中是允许的。

但是,当尝试将非常量左值引用绑定到不同类型的左值时,会发生错误:

int a;
double &m = a;

错误:对类型“double”的非常量左值引用无法绑定到不相关类型“int”的值

引发此错误是因为暂时涉及。从 int 到 double 的隐式类型转换会创建一个临时对象。非常量引用不能绑定到临时对象,因为它们要求对象具有已知的生命周期和位置。就其本质而言,临时对象的存在时间有限。

由于编译器扩展允许在某些情况下绑定到临时对象,因此 Visual Studio 可以编译此代码而不会出现错误。但是,像 GCC 这样的编译器会正确标记此错误。

下面的示例演示了用户定义类型的类似问题:

struct Foo {};

Foo &obj = Foo(); // error: binding non-const reference to temporary

理解这个概念对于在 C 中正确处理引用至关重要并避免与对象生命周期相关的运行时问题。

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

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