【发布时间】:2021-07-16 16:36:58
【问题描述】:
std::vector foo( std::vector && rval )
{
return std::move( rval );
}
如果一个函数需要一个右值引用但得到了其他东西——例如const 引用或临时引用或与std::move(vec) 不同的任何东西,它会默默地复制而不是抛出错误甚至警告吗?
【问题讨论】:
-
临时可以绑定到右值引用。无需复制。左值引用,无论是否为 const,都不能。试图通过一个是可诊断的约束违规。
-
"如果一个函数需要一个右值引用但得到了其他东西" 那是不可能的。如果函数接受 X,那么它得到 X。有时,需要将 Y 强制转换为 X,但函数获取 X。你不能将
const&传递给一个函数,它采用&&而不进行显式转换,在这种情况下,您是负责这些操作的可行性的人。临时对象自然绑定到右值引用。
标签: c++ c++20 rvalue-reference