当前位置: 首页 > wzjs >正文

山东淄博网站建设公司wordpress lovevideo

山东淄博网站建设公司,wordpress lovevideo,青州网站设计,网站管理后台如果在代理商那里接手会不会停掉文章目录 一、std::ref的作用二、 使用指针和lambda表达式的好处<br><br>三、模板可变参数与引用折叠&#xff08;一&#xff09;模板可变参数&#xff08;二&#xff09;引用折叠 一、std::ref的作用 在多线程编程中&#xff0c;std::ref是一个非常有用的工具&…

文章目录

  • 一、std::ref`的作用
  • 二、 使用指针和lambda表达式的好处<br><br>
  • 三、模板可变参数与引用折叠
    • (一)模板可变参数
    • (二)引用折叠

一、std::ref`的作用

  在多线程编程中,std::ref是一个非常有用的工具,它允许我们将引用传递给线程函数,而不是传递副本。这在某些情况下可以避免不必要的拷贝,提高效率。例如:

void Print1(size_t n, const std::string& s, std::mutex& m, int& rx);

  如果直接这样传递参数会报错:
  同时在线程函数中对a修改,不会影响外部实参,因为:线程函数参数虽然是引用方式,但其实际引用的是线程栈中的拷贝

// unknown-type std::invoke(_Callable &&,_Ty1 &&,_Types2 &&...) noexcept(<expr>)
std::thread t1(Print1, 100, "hello mutex", std::ref(mtx), std::ref(x));

  这里std::refmtxx的引用传递给了线程函数Print1,而不是它们的副本。如果不使用std::refmtxx将会被拷贝,这可能导致线程间无法正确共享资源。

二、 使用指针和lambda表达式的好处

  在多线程编程中,线程函数的参数传递是一个关键问题。使用指针和lambda表达式可以有效避免引用带来的麻烦。例如,lambda表达式可以捕获上下文变量,并以值或引用的方式传递给线程函数,简化代码并避免引用悬挂或生命周期问题。

void Print(size_t n, size_t j, const std::string& s) {for (size_t i = j; i < j + n; i++) {std::cout << std::this_thread::get_id() << " " << s << ": " << i << std::endl;}
}int main() {std::thread t1(Print, 100, 1, "Thread 1");std::thread t2([=]() {Print(100, 101, "Thread 2");});t1.join();t2.join();return 0;
}

三、模板可变参数与引用折叠

(一)模板可变参数

模板可变参数是C++11引入的一个强大特性,它允许函数接受任意数量和类型的参数。std::thread的构造函数利用了模板可变参数,能够接受任意类型的参数,并将它们转发给线程函数。例如:

template <class F, class... Args>
explicit std::thread(F&& f, Args&&... args);

这里的Args&&... args表示可变参数模板,std::thread会将这些参数转发给线程函数。

(二)引用折叠

引用折叠是C++11中引入的一个机制,用于处理引用的传递和绑定。它的主要规则如下:

• 左值引用折叠:如果一个引用被绑定到一个左值,那么它会被折叠为左值引用。

• 右值引用折叠:如果一个引用被绑定到一个右值,那么它会被折叠为右值引用。

• 混合引用折叠:如果一个引用被绑定到一个左值或右值,那么它会被折叠为左值引用。

引用折叠的作用是确保参数的正确传递,避免不必要的拷贝和悬挂引用问题。例如:

注意:如果是类成员函数作为线程参数时,必须将this作为线程函数参数。


文章转载自:

http://1bC0hi6Q.dygqq.cn
http://mewP4X1u.dygqq.cn
http://dYJDMcin.dygqq.cn
http://0fweYwcB.dygqq.cn
http://MNz4CYj7.dygqq.cn
http://Ug50C25o.dygqq.cn
http://Io4f7LRU.dygqq.cn
http://YQ4pfdDD.dygqq.cn
http://IQlhP3jX.dygqq.cn
http://k40nEKqU.dygqq.cn
http://4mhP2fxw.dygqq.cn
http://uSY7FrN7.dygqq.cn
http://Mf1GeO5F.dygqq.cn
http://HOq5MAWN.dygqq.cn
http://OnxbmXZf.dygqq.cn
http://Bgds25mt.dygqq.cn
http://6wrRpEDz.dygqq.cn
http://keokytUS.dygqq.cn
http://7C4tGmiG.dygqq.cn
http://89NRRA9Z.dygqq.cn
http://RcWA5rOn.dygqq.cn
http://UoDDDA83.dygqq.cn
http://RJrQApgx.dygqq.cn
http://v9zzYqOW.dygqq.cn
http://wLIAFIjg.dygqq.cn
http://5Pqbgeyk.dygqq.cn
http://a0Kaasjn.dygqq.cn
http://7cmWzJ4S.dygqq.cn
http://vQXCPsjM.dygqq.cn
http://1T4tVyXR.dygqq.cn
http://www.dtcms.com/wzjs/675727.html

相关文章:

  • 养生网站建设免费做网站哪种语言好
  • 获取网站开发语言手表网
  • 官方建网站哪个好制作企业网站与app有什么不同
  • 河南建设建设监理协会网站摄影作品网站源码
  • 广安网站开发快速网站建设
  • 做购物网站的素材超市管理系统
  • 怎么创建网站挣钱百度云虚拟主机如何建设网站
  • 黄石网站建设多少钱昆明官网seo诊断
  • 用手机做诱导网站课题网站建设验收总结报告
  • 做物流网站找哪家好重庆网站seo搜索引擎优化
  • 如何介绍一个网站的促销功能百度统计登录
  • 建设银行网站 查余额查询河南网站建设费用
  • 连云港建设局电力网站百度关键词模拟点击软件
  • 介绍网站ppt该怎么做云主机搭建wordpress
  • 多导航织梦网站模板下载地址长沙网站设计公司排名
  • 建设网站及域名费用京山网站开发
  • 网站做彩票犯法吗网站建设及优化心得体会
  • 微网站分销下载爱南宁乘车
  • 做网站用什么语言开发wordpress首页按钮
  • 凡科网站建设怎么样腾讯云加wordpress教程
  • 昆明智能网站推广价格wordpress插件微信
  • 生鲜网站建设背景seo外包公司哪家专业
  • 网站建设与维护经营范围口碑好的番禺网站建设
  • 程序员做游戏还是做网站好共享办公室 设计
  • 汕头投资建设总公司网站淄博住房和城乡建设局网站
  • 网站建设源代码怎么搭建麻涌网站建设制作多少钱
  • 孟村网站建设汝州建设局网站
  • 网站开发应看什么书籍网站显示已备案
  • 网站建设是用自己的服务器培训学校网站建设方案
  • 温州门户网站平台seo什么意思