C++ std::转换一元操作签名

C++ std::转换一元操作签名,c++,stl,C++,Stl,我对std::transfrom的以下内容感到困惑: 一元运算\u op-将应用的一元运算函数对象。 函数的签名应等同于以下内容: Ret-fun(const-Type&a) 签名不需要有常量& 这两种说法似乎相互矛盾。有人能澄清一下这里的意思吗?如果签名是Ret-fun(Type a)或Ret-fun(Type&&a)或Ret-fun(Type&a),会发生什么情况?它想说的是fun必须是这样的: *OutputIt = fun(*InputIt); 这是合法的。还请注意 一元操作。。。不得

我对std::transfrom的以下内容感到困惑:

一元运算\u op-将应用的一元运算函数对象。 函数的签名应等同于以下内容:

Ret-fun(const-Type&a)

签名不需要有
常量&


这两种说法似乎相互矛盾。有人能澄清一下这里的意思吗?如果签名是
Ret-fun(Type a)
Ret-fun(Type&&a)
Ret-fun(Type&a)
,会发生什么情况?

它想说的是
fun
必须是这样的:

*OutputIt = fun(*InputIt);
这是合法的。还请注意

一元操作
。。。不得使任何迭代器(包括结束迭代器)无效,或修改所涉及范围的任何元素


,因此非常量引用是合法的,但不能使用非常量。

我认为这个问题太广泛了。例如,对于简单类型的算术类型,使用常量int而不是int没有什么好处。@vladfrommosco,我的问题不是什么更好。这是关于函数如何工作,以及为什么文档首先说签名必须有
const&
,而下一个语句不必有它。我没有看到动词“hasthave”。我看到了动词“应该”。@vladfromscow这个问题仍然不是试图问“什么是最好的”,而是“实际要求是什么”,在我看来这是一个很好的问题。