首页 > 解决方案 > 为什么可以通过 const 左值引用传递右值?

问题描述

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

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

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

class Entity
{
   Entity()
   {
      std::cout << "Entity created\n";
   }
}

void Function(const Entity& e) // recieved as const lvalue reference
{
   std::cout "Inside function\n";
}

int main()
{
   Function(Entity()); // passing rvalue
}

标签: c++referencevalue-categories

解决方案


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

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


推荐阅读