我是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++有怎样的语法呢?我通过使用搜索引擎搜索相关主题,但没有找到任何结果.
提前致谢.
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,简而言之,可以在没有参数的情况下调用的任何东西.
| 归档时间: |
|
| 查看次数: |
283 次 |
| 最近记录: |