gpt4 book ai didi

c++ - C++ 中的 operator()() 是做什么的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:53 28 4
gpt4 key购买 nike

我是 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();
}

输出将是“This is new thread”,但我真的不明白函数“operator()() const”是什么意思?在这种情况下,它的行为实际上与构造函数相同,对吗?

C++ 怎么会有这样的语法呢?我使用搜索引擎搜索了相关主题,但没有找到任何结果。

提前致谢。

最佳答案

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

background_task b;

b(); // prints "This is a new thread"

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

请注意,此语法早于 C++11。您可以在 C++03 中创建可调用类型(也称为 仿函数)。与 C++11 的联系是 std::thread 构造函数需要一些可以不带参数调用的东西。这可能是一个简单的函数

void foo() {}

静态成员函数

struct foo {
static void bar() {}
};

一个类型的实例,例如 background_task,一个合适的 lambda 表达式,一个合适的 std::bind 调用,简而言之,任何可以不带参数调用的东西。

关于c++ - C++ 中的 operator()() 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26323455/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com