STL ref和cref函数 为什么C++中有两种不同名称的函数:代码> REF< /COD>和 CREF < /代码>?为什么不是唯一重载的ref函数?有一些重要的语义原因吗?

STL ref和cref函数 为什么C++中有两种不同名称的函数:代码> REF< /COD>和 CREF < /代码>?为什么不是唯一重载的ref函数?有一些重要的语义原因吗?,c++,stl,C++,Stl,因为有时您希望将常量引用包装到非常量对象。在这种情况下,std::cref允许您编写 std::cref(x) 而不是 std::ref(static_cast<const T&>(x)) std::ref(静态(x)) (其中T当然是x的类型)。因此我可以在“通用”代码中专门使用ref函数,不是吗?ref对于const参数来说是可行的重载吗?@Orient:我认为通常std::ref/std::cref在参数推导的另一方面,即在调用站点上使用得更多。你的函数应该专门处

因为有时您希望将
常量
引用包装到非
常量
对象。在这种情况下,
std::cref
允许您编写

std::cref(x)
而不是

std::ref(static_cast<const T&>(x))
std::ref(静态(x))

(其中
T
当然是
x
的类型)。

因此我可以在“通用”代码中专门使用
ref
函数,不是吗?
ref
对于
const
参数来说是可行的重载吗?@Orient:我认为通常
std::ref
/
std::cref
在参数推导的另一方面,即在调用站点上使用得更多。你的函数应该专门处理一个
std::reference\u包装,并从那里获得它。它类似于
begin
/
cbegin