std :: transform一元操作签名

Dmi*_*y J 3 c++ stl

我对std :: transfrom 的以下描述感到困惑:

unary_op - 将应用的一元操作函数对象.函数的签名应该等同于以下内容:

Ret fun(const Type &a);

签名不需要const &.

这两个陈述似乎是矛盾的.有人可以澄清这里的意思吗?如果签名是会发生什么Ret fun(Type a)Ret fun(Type&& a)Ret fun(Type& a)

Mar*_*ica 5

它试图说的是,fun必须是这样的:

*OutputIt = fun(*InputIt);
Run Code Online (Sandbox Code Playgroud)

是合法的.另请注意

unary_op ...不得使任何迭代器无效,包括结束迭代器,或修改所涉及范围的任何元素.

,所以非const引用是合法的 - 但它不能使用非constness.