为什么可以通过常量左值引用传递右值?



在C++中,可以将右值传递给接受常量左值引用的函数。我不明白这是为什么。

表达式Function(Entity())表面上是一个右值,它在内存中没有可识别的位置。如果Function()采取Entity&而不是const Entity&,那么这是行不通的。但是,如果函数采用常量左值引用而不是左值引用,则工作正常。

有人可以解释一下这是如何工作的以及为什么吗?

class Entity
{
Entity()
{
std::cout << "Entity createdn";
}
}
void Function(const Entity& e) // recieved as const lvalue reference
{
std::cout "Inside functionn";
}
int main()
{
Function(Entity()); // passing rvalue
}

需要注意的是,这不需要类。void Function(int const& i) { std::cout << i; }可以称为Function(2+2).

对于类和内置类型,原因相同。临时可以绑定到常量引用。这是非常有意的。它是安全和有用的。安全:由于您无法通过 const 引用更改引用的对象,因此此类更改不会在临时对象中丢失。有用:它使编译器免于复制大型对象。

最新更新