gpt4 book ai didi

c++ - 理解 C++ 中的运算符重载

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:09 25 4
gpt4 key购买 nike

我可能有点笨,但不明白下面几行是做什么的?

class background_task
{
public:
void operator()() const
{
do_something();
do_something_else();
}
};

background_task f;
std::thread my_thread(f);
  1. 我意识到创建了一个线程(名为 my_thread),它调用 background_task 类的对象 f 但函数 background_task 类中的 code>operator() 实际调用了吗?

  2. 为什么需要重载函数运算符?

  3. 我明白这是 C++ 101 或非常基础,但我仍然无法掌握它,所以我应该引用哪些书籍以了解更多关于 C++ 的此类主题。

最佳答案

这个operator()()的定义

class background_task
{
public:
void operator()() const
{
do_something();
do_something_else();
}
};

意味着您可以实例化一个 background_task 并调用它(在这种情况下没有任何参数)。这使它成为一个“可调用实体”:

background_task f;
f(); // calls foo::operator ()(), i.e calls do_something() and do_something_else().

至于线程,它需要一个不带参数的可调用实体,因此将 background_task 的实例传递给它就可以了。如果 background_task 不可调用,则以下不会编译:

background_task f;
std::thread my_thread(f);

std::thread 构造函数还允许您传递可调用实体的参数,如果它有参数的话,例如

class background_task
{
public:
void operator()(double x) const
{
// do something with x, if you want
do_something();
do_something_else();
}
};

将与

一起工作
background_task f;
std::thread my_thread(f, 3.1416);

在内部,线程将执行与调用 f(3.1416) 相同的操作。

编辑:最初我声称不涉及重载。这还不是很清楚,所以我改写了我的答案。

关于c++ - 理解 C++ 中的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10111084/

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