c ++中的operator()()有什么作用?

xti*_*ger 1 c++ c++11

我是C++ 11线程的新手,在阅读教程时,我看到了一段这样的代码.

 #include <thread>
 #include <iostream>
 using namespace std;

 class background_task
 {
  public:
     void operator()() const
     {
         cout<<"This is a new thread";
     }
 };

int main()
{
   background_task f;
   std::thread my_thread(f);
   my_thread.join();
}
Run Code Online (Sandbox Code Playgroud)

输出将是"这是新线程",但我真的不明白函数"operator()()const"是什么意思?在这种情况下,它与构造函数的行为完全相同,是不是?

那么C++有怎样的语法呢?我通过使用搜索引擎搜索相关主题,但没有找到任何结果.

提前致谢.

jua*_*nza 7

void operator()()表示具有该运算符的类的实例可以使用函数调用语法调用,没有返回值,也没有任何参数.例如:

background_task b;

b(); // prints "This is a new thread"
Run Code Online (Sandbox Code Playgroud)

operator()部分表示它是一个调用操作符,第二组空括号()表示操作符没有参数.这是一个带有两个参数和返回值的示例:

struct add
{
  int operator()(int a, int b) const { return a + b; }
};

add a;
int c = a(1, 2); // c initialized to 1+2
Run Code Online (Sandbox Code Playgroud)

请注意,此语法早于C++ 11.您可以在C++ 03中创建可调用类型(也称为仿函数).与C++ 11的连接是std::thread构造函数期望可以在没有参数的情况下调用的东西.这可能是一个普通的功能

void foo() {}
Run Code Online (Sandbox Code Playgroud)

静态成员函数

struct foo {
  static void bar() {}
};
Run Code Online (Sandbox Code Playgroud)

一个类型的实例,例如background_task,一个合适的lambda表达式,一个合适的调用std::bind,简而言之,可以在没有参数的情况下调用的任何东西.