在C ++中,可以将右值传递给接受const左值引用的函数。我不明白为什么会这样。
表达式Function(Entity())
表面上是一个右值,在内存中没有可识别的位置。如果Function()
采取Entity&
而不是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
}
答案 0 :(得分:1)
需要注意的重要一点是,这不需要类。 void Function(int const& i) { std::cout << i; }
可以称为Function(2+2)
。
原因与类和内置类型相同。临时对象可以绑定到const引用。这是非常故意的。它既安全又有用。安全:由于无法通过const引用更改引用的对象,因此此类更改不会丢失在临时对象中。有用:它可以避免编译器复制大对象。