我发现了这个引用:
- 让预测成为纯函数。
谓词纯度:谓词是一个返回yes/no答案的函数对象,通常作为布尔值返回。在数学意义上,如果函数的结果只取决于其参数,则函数是纯的(请注意,“纯”一词与纯虚函数无关)。
不要允许谓词持有或访问影响其operator()结果的状态,包括成员和全局状态。对于谓词,最好将operator()设置为const成员函数(请参见Item 15)。
在这个语句中提到的纯函数是什么,可以举例说明吗?先谢谢了。
这是一个纯函数:
int foo(int n)
{
return n*2;
}
调用它的结果仅取决于其参数。
这不是一个纯函数:
int i = 42;
int bar(int n)
{
++i;
return n*i;
}
返回值取决于除参数之外的其他事情。
int f(int n) { return n; }
。 - Ed Healreturn 42;
。 - juanchopanza如果一个函数满足以下条件,则称之为纯函数:
因此,该函数仍然可以拥有状态,但是状态不应该是可观察到的。例如:
int foo(std::vector<int> v) {
static std::vector<int> tmp;
tmp.resize(v.size);
std::transform(v.begin(), v.end(), tmp.begin(), [](int a) {return a * a;});
return std::accumulate(tmp.begin(), tmp.end(), 0);
}
函数foo具有状态(静态向量),但它是非语义可观察的,因此它是纯函数。虽然这是一个愚蠢的函数,但它应该可以说明问题。
int multiplyByTwo(int n)
{
return n * 2;
}