我发现了这句话:
- 预测纯粹的功能。
醇>谓词纯度:谓词是一个返回是/否答案的函数对象,通常为 bool 值。一个功能是纯粹的 数学意义,如果它的结果只取决于它的论点 (注意,这种“纯粹”的使用与纯虚拟无关 函数)。
不允许谓词保持或访问影响结果的状态 他们的 operator(),包括成员和全球州。 更喜欢为 operator() a const 成员函数 谓词(见第15项)。
本声明中提到的纯函数是什么,有人可以提供示例吗?提前谢谢。
答案 0 :(得分:14)
这是一个纯函数:
int foo(int n)
{
return n*2;
}
调用它的结果仅取决于它的参数。
这不是一个纯函数:
int i = 42;
int bar(int n)
{
++i;
return n*i;
}
返回的值取决于参数以外的其他内容。
答案 1 :(得分:6)
如果符合以下条件,则功能是纯粹的:
因此该函数仍然可以具有状态,但它不应该是可观察的。例如:
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有一个状态(静态向量),但它不是语义上可观察的,因此它是纯粹的。它是一个愚蠢的功能,但它应该表明这一点。