std :: transform一元操作签名

时间:2018-03-03 13:20:51

标签: c++ stl

我对以下description std :: transfrom:

感到困惑
  

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

     

Ret fun(const Type &a);

     

签名不需要const &

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

,会发生什么?

1 个答案:

答案 0 :(得分:5)

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

*OutputIt = fun(*InputIt);

是合法的。还要注意

  

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

,所以非const引用是合法的 - 但它不能使用非常量。