当我读取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;
}
答案 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()
。