【问题标题】:Weird function call like syntax [closed]奇怪的函数调用,如语法[关闭]
【发布时间】:2013-12-09 21:50:02
【问题描述】:

我在 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 中查找函数调用运算符。见stackoverflow.com/questions/2349867/…
  • 这是一个C++风格的对象初始化。
  • 这是一个对象实例化,然后调用smt2::parser::operator()
  • smt2::parser 是一种类型。 p 是一个实例。 (ctx, is, interactive) 是构造 p 的参数。
  • @KeithSmith 此代码中不涉及任何默认构造函数。 Kate 只是在 p() 调用 stm2::parser::operator() 方面是正确的,但这不是 OP 好奇的那一行,也没有调用它的默认构造函数。

标签: c++


【解决方案1】:

直接说起来有点困难。但我想象的是smt2::parser 是类或结构类型的名称。线

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

调用该类/结构的构造函数。 stm2::parser 定义的类可能重载了 () 运算符。我发现a tutorial 提供了有关函数调用的运算符重载的更多信息。

【讨论】:

  • @Kate Gregory,感谢您的编辑。这使答案更具可读性。
【解决方案2】:

在 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2018-05-14
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多