奇怪的类似函数调用的语法

Weird function call like syntax

本文关键字:函数调用 语法      更新时间:2023-10-16

我在C++文件中遇到了这个顶级函数。所以我的问题是:

  1. smt2::parser类型声明究竟在做什么
  2. 这个功能叫什么
  3. 与常规呼叫p(ctx, is, interactive);有何不同

这是代码:

bool parse_smt2_commands(cmd_context & ctx, std::istream & is, bool interactive) {
    smt2::parser p(ctx, is, interactive);
    return p();
}

不幸的是,到目前为止,我还没能用grep找到p()的定义。当我找到定义时,我会更新这篇文章(手动跟踪标题可能需要一段时间)。

直接判断有点困难。但我认为smt2::parser是一个类或结构类型的名称。线路

stm2::parser p(ctx,is,interactive);

调用该类/结构的构造函数。stm2::parser定义的类可能重载了()运算符。我找到了一个教程,里面有关于函数调用运算符重载的更多信息。

在OP中提供的代码中,psmt2::parser类型的对象。它调用一个接受三个参数的构造函数。p()调用重载运算符(可能是operator()()),该运算符返回布尔。

这里有一个例子:

class Test {
public:
Test(int i, char j, bool k) {
}
~Test() { }
bool operator()() const {
return true;
}
};

在这种情况下,我们只是临时呼叫操作员来演示正在发生的事情。

int main() {
std::cout << Test(1, 'a', true)(); // 1
return 0;
}