C++ 面试题 目录

C++ 中什么是函数对象 (function object)?

推荐答案

在C++中,函数对象(Function Object)是一个类对象,它重载了函数调用运算符 operator()。通过重载这个运算符,类的实例可以像函数一样被调用。函数对象通常用于STL算法中,作为回调函数或谓词。

-- -------------------- ---- -------
----- --- -
-------
    --- -------------- -- --- -- ----- -
        ------ - - --
    -
--

--- ------ -
    --- ----
    --- ------ - ------ ---  -- ------
    ------ --
-

本题详细解读

什么是函数对象?

函数对象是一个类对象,它通过重载 operator() 使得对象可以像函数一样被调用。这种对象通常用于需要传递函数作为参数的场景,例如STL算法中的 std::sortstd::for_each 等。

函数对象的优点

  1. 状态保持:函数对象可以拥有成员变量,因此可以在多次调用之间保持状态。
  2. 灵活性:函数对象可以像普通函数一样使用,也可以作为模板参数传递。
  3. 性能:函数对象通常比函数指针更高效,因为编译器可以更好地优化它们。

函数对象的使用场景

  1. STL算法:许多STL算法接受函数对象作为参数,例如 std::sortstd::transform 等。
  2. 回调函数:函数对象可以作为回调函数传递给其他函数或对象。
  3. 谓词:函数对象常用于谓词(Predicate),例如在 std::find_if 中。

示例代码

-- -------------------- ---- -------
-------- ----------
-------- --------
-------- -----------

----- ----------- -
-------
    --------------- ---------- - --------------------- --
    
    ---- -------------- ------ ----- -
        ------ ----- - -----------
    -

--------
    --- -----------
--

--- ------ -
    ---------------- --- - --- -- -- -- ---
    ----------- ------
    ---- -- - ------------------------- ---------- ----
    
    -- --- -- ---------- -
        --------- -- ------ ------- ------- ---- -- - -- --- -- ----------
    -
    
    ------ --
-

在这个例子中,GreaterThan 是一个函数对象,它用于在 std::find_if 中查找第一个大于给定阈值的元素。

纠错
反馈