当您可以使用构造函数时,为什么要在 C++ class 或结构中重载 () 运算符(可调用运算符)?

Why overload the () operator (callable operator) in a C++ class or struct when you could use a constructor?

为什么要重载 C++ class 中的 () 运算符或 C++11 或更高版本中的结构?据我所知,当您想将 classes 或结构之类的对象传递到 std::thread 并启动一个带有数据包的新线程时,这些运算符会过载,通过可调用类型。 但除此之外,为什么还要重载 () 运算符?不能简单地在 class 或结构的构造函数中做同样的事情吗?

为什么使用

  struct MyCallableStruct{
    void operator() () {
        dosomething();
    }
  }

什么时候可以做

  struct MyCallableStruct{
      MyCallableStruct() { dosomething(); }
  }

他们完全不同。

首先也是最重要的,当你使用operator()时,它可以作为函数参数传递(通过对象)。 相比之下,通过constructor实现时,只能通过模板传递(通过class)

其次,operator()可以在对象创建后多次调用, 而构造器只能在构造时调用

总而言之,它们在不同的场景中是不同的和有用的