什么是纯粹的功能?

时间:2014-03-08 11:42:29

标签: c++ function predicate

我发现了这句话:

  
      
  1. 预测纯粹的功能。
  2.         

    谓词纯度:谓词是一个返回是/否答案的函数对象,通常为 bool 值。一个功能是纯粹的   数学意义,如果它的结果​​只取决于它的论点   (注意,这种“纯粹”的使用与纯虚拟无关   函数)。

         

    不允许谓词保持或访问影响结果的状态   他们的 operator(),包括成员和全球州。   更喜欢为 operator() a const 成员函数   谓词(见第15项)。

本声明中提到的纯函数是什么,有人可以提供示例吗?提前谢谢。

2 个答案:

答案 0 :(得分:14)

这是一个纯函数:

int foo(int n)
{
  return n*2;
}

调用它的结果仅取决于它的参数。

这不是一个纯函数:

int i = 42;

int bar(int n)
{
  ++i;
  return n*i;
}

返回的值取决于参数以外的其他内容。

答案 1 :(得分:6)

如果符合以下条件,则功能是纯粹的:

  1. 它没有语义上可观察到的副作用
  2. 在相同输入的情况下始终返回相同的结果
  3. 因此该函数仍然可以具有状态,但它不应该是可观察的。例如:

    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有一个状态(静态向量),但它不是语义上可观察的,因此它是纯粹的。它是一个愚蠢的功能,但它应该表明这一点。