在学习多线程的时候看到这样的一段代码,为什么要重载()呢?真有这个必要吗?

#include <iostream>
#include <thread> class Counter {
public:
Counter(int value) : value_(value) {
} void operator()() {
while (value_ > 0) {
std::cout << value_ << " ";
--value_;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
std::cout << std::endl;
} private:
int value_;
}; int main() {
std::thread t1(Counter(3));
t1.join(); std::thread t2(Counter(3));
t2.detach(); // 等待几秒,不然 t2 根本没机会执行。
std::this_thread::sleep_for(std::chrono::seconds(4)); return 0;
}

对 void operator()()的功能表示困惑

// 查阅了一些资料,这个是简易的说明代码
class background_task
{
public:
void operator()() const
{
do_something();
do_something_else();
}
};
background_task f;
std::thread my_thread(f);

在这里,为什么我们需要operator()()?第一个和第二个()的意思是什么?其实我知道这是重载运算符的操作()

我们在学习C++的时候,学习过运算符重载。这里重载() 可以使对象像函数那样使用,常常被称为函数对象。 (这里用作线程对象的构造)

第一个()是运算符的名称 – 它是在对象上使用()时调用的运算符. 第二个()是用于参数的。

以下是您如何使用它的示例:

background_task task;
task(); // calls background_task::operator()

有参数的演示:

#include <iostream>

class Test {
public:
void operator()(int a, int b) {
std::cout << a + b << std::endl;
}
}; int main() {
Test t;
t(3,5);
return 0;
} // 输出结果
// 8

最新文章

  1. getSupportFragmentManager要用在FragmentActivity及其子类中
  2. linux下部署项目问题
  3. CSS超出部分显示省略号…代码
  4. Objective-C ,ios,iphone开发基础:快速实现一个简单的图片查看器
  5. Android 签名(8)签名前用Zipalign简单优化
  6. mkfs.xfs命令没找到
  7. 用于做 Android 屏幕自适应的文章资源
  8. javascript之闭包深入理解(一)
  9. 关于XMLHttpRequest对象的responseText属性
  10. Unity3D 中材质球(Material)预制体打包成AB(AssetBundle)出现材质丢失问题的解决方案
  11. C# ASP.NET 转换为int型的方法 很实用
  12. 【转载三】Grafana系列教程–Grafana的配置及运行
  13. dubbo-admin在jdk8下不兼容
  14. 得到一个Object的属性
  15. [转]-[携程]-A Hybrid Collaborative Filtering Model with Deep Structure for Recommender Systems
  16. 利用VRID/VMAC实现更安全的netscaler HA故障切换
  17. BZOJ 1854: [Scoi2010]游戏 并查集
  18. SpringCloud 进阶之分布式配置中心(SpringCloud Config)
  19. clang命令理解程序
  20. c++ 一般虚函数

热门文章

  1. Java容器面试总结
  2. JVM面试题总结
  3. 个人工作用SQL短句,不定时更新
  4. MySQL语句的使用
  5. 关于SPSS Modeler18 提示:用于定义的观测值的字段的值无效
  6. webpack4.X + react搭建
  7. 从发布-订阅模式谈谈 Flask 的 Signals
  8. 【error fixed】E: Package &#39;oracle-java8-installer&#39; has no installation candidate
  9. 每日一题 - 剑指 Offer 50. 第一个只出现一次的字符
  10. abp一代数据迁解析