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

标签 c++ c++11 operator-overloading callable-object

<分区>

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

为什么要用

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

什么时候可以做

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

最佳答案

它们完全不同。

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

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

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

关于c++ - 当您可以使用构造函数时,为什么要在 C++ 类或结构中重载 () 运算符(可调用运算符)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56419589/

相关文章:

c++ - 程序意外结束 - QT creator

c++ - 嵌套的 boost::variant fusion 对的编译失败

c++ - 使用 >> 运算符设置对象

c++ - 两个数组下标重载读写

c++ - 当通过成员函数将文字传递给构造函数时,为什么没有将值分配给类的成员?

C++:互斥锁从通知程序到服务员的传递是无缝的吗?

c++ - 来自事件处理程序的 STM32 函数指针

c++ - c++ 的 gsl_function 替代方案

c++ - std::atomic<int> 上的预增量与后增量

c++ - 运算符重载 "operator T * ()"产生比较运算符?