【发布时间】:2019-06-02 23:02:24
【问题描述】:
为什么要在 C++ 类或 C++11 或更高版本的结构中重载 () 运算符?据我所知,当您想要将类或结构等对象传递到 std::thread 并通过可调用类型启动一个带有数据包的新线程时,这些运算符会被重载。 但除此之外,为什么还要重载 () 运算符?你不能简单地在类或结构的构造函数中做同样的事情吗?
为什么要使用
struct MyCallableStruct{
void operator() () {
dosomething();
}
}
什么时候可以做
struct MyCallableStruct{
MyCallableStruct() { dosomething(); }
}
【问题讨论】:
-
它们的效果截然不同。
-
operator()的全部意义在于让对象看起来像函数一样。是的,如果你忽略一个特征的点,那么这个特征就没有意义。但是,如果您不从可以忽略功能的预期点的角度出发,那么……嗯,这就是重点。我不明白你的问题。 -
这两个上下文完全不同。前者实际上并不执行anything;它只声明了一个 can 的操作符。后者总是在构造时执行。如果这符合您的使用模式,那就这样吧,但它们是非常不同的东西。
-
一个是对象可以用作函子,另一个是在对象构造时发生。可以一遍又一遍地调用具有函子的构造对象。构造对象只构造一次。
标签: c++ c++11 operator-overloading callable-object