1

有件事在我的脑海里萦绕了很久。只需考虑这个函数:

template<typename T>
T foo(const T& value)
{
    return value;
}

它是任何给定值的最简单的函数包装器。但是,我一直想知道它是否有一个“标准名称”(许多人会认出,例如 map、filter、sqrt 等函数)。它们是需要使用这种功能的众所周知的问题吗?

4

4 回答 4

7

原则上它是一个恒等函数,但在实践中它强制一个参数的副本。

所以,如果T有值语义,它仍然是一个真实的身份。否则,它是一个克隆功能。

一个完美的身份将是

template<typename T>
const T& identity(const T& value)
{
    return value;
}
于 2012-07-18T08:57:51.443 回答
2

这是一个身份功能。例如,当您必须将投影传递给其他函数并且不想要任何投影时,它很有用。不,不是非常有用,但这是您可以从基本上什么都不做的功能中获得的最好效果。

于 2012-07-18T08:53:24.117 回答
2

如果不对函数内部的参数进行任何更改,我不确定它是否具有任何编程命名法。

您也不能说这是一个完整的身份,因为返回的对象不是同一个对象,因为您按值返回。

我会说这是一个克隆功能

于 2012-07-18T08:55:05.440 回答
0

这是身份功能的解释

于 2012-07-18T08:53:15.393 回答