C ++ struct后跟括号直接形成一个仿函数?

时间:2016-06-27 19:49:17

标签: c++

当我读取std :: function时,我发现以下语法令人困惑。直接由空括号直接跟随的结构在这里做什么?它的作用相当于声明一个struct对象并调用它的运算符。

#include <iostream>

using namespace std;

int main() {

    struct F {
        bool operator()(int a) {
            return a>0;
        }
    };

    function<bool(int)> f = F(); //What does the syntax F() mean here?
    struct F ff;
    cout <<  f(1) <<endl; 
    cout << ff(1) <<endl;
    return 0;
}

2 个答案:

答案 0 :(得分:2)

  

F()的语法是什么意思?

这意味着使用默认构造函数构造类型为F的对象。

可以使用满足其调用条件的任何可调用对象构造std::function。在您的特定用例中,F的实例符合std::function<bool(int)>的条件。因此,

function<bool(int)> f = F();

是构造f的有效语句。

答案 1 :(得分:2)

不要因为调用默认的构造函数也使用()而感到困惑。此

function<bool(int)> f = F();

调用构造函数并将对象赋给函数f,而这个

f(1)

调用operator()