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

单页型网站军事新闻 今日关注

单页型网站,军事新闻 今日关注,app大全软件网站,wordpress修改文章时间一、std::copyable_function std::function在被引入C标准后,大家用起来还是相当方便的,虽然对于函数指针,std::function确实是有点重量。但实际上,对于大多数的开发者,其实对这个重量不重量并不敏感。不过,…

一、std::copyable_function

std::function在被引入C++标准后,大家用起来还是相当方便的,虽然对于函数指针,std::function确实是有点重量。但实际上,对于大多数的开发者,其实对这个重量不重量并不敏感。不过,它确实还是有一些细节上的问题的。这不,C++26就提出了std::copyable_function,不过大家一定要注意,std::copyable_function并不是替代std::function,而是对其的细节的完善和补充。其定义如下:

copyable_function() noexcept;
copyable_function( std::nullptr_t ) noexcept;
copyable_function( const copyable_function& other );
copyable_function( copyable_function&& other ) noexcept;
template< class F >
copyable_function( F&& f );
template< class T, class... CArgs >
explicit copyable_function( std::in_place_type_t<T>, CArgs&&... args );
template< class T, class U, class... CArgs >
explicit copyable_function( std::in_place_type_t<T>,std::initializer_list<U> il, CArgs&&... args );

二、与std::function区别及应用

那么std::copyable_function和std::function到底有什么不同呢?
1、std::copyable_function支持显示的指定cv限定符、引用限定符以及noexcept规范。
这是什么意思呢,其实就是让函数的匹配更精确,更容易达到设计者的目的,从而避免一些因某些细小的问题导致的函数的调用错误。std::function并未提供异常处理并且存在常量处理的缺陷。
2、std::copyable_function引入了严格的非空处理
如果确实出现了空值的情况,会出现UB行为(这个不好啊),而std::function在类似的情况下会抛出一个异常。
3、不支持RTTI的依赖
std::copyable_function移除了类似 function::target_type() 或 target() 的接口。从而降低了大多数场景中内存和运行的开销

既然这二者有这些细节的不同,又提到前者并不是后者的替代者,那么如何应用到具体的开发场景中呢?
1、在大多数场景下,可以考虑使用std::copyable_function来替代std::function,特别是在新的项目中
2、不必强制必须使用std::copyable_function,当然如果遇到必须对限定符显示处理时,一定要使用它。毕竟其能提供更好的类型安全控制。
3、在新旧工程混用时,如无明确需求,优先使用std::copyable_function,如与std::function有冲突,再使用后者

三、例程

看一下相关的例程:

//  std::function
std::function<int(int)> func11 = [](int x) { return x+x; };//  std::copyable_function :必须使用常量调用且不抛异常
std::copyable_function<int(int) const> func26 = [](int x) noexcept { return x +x; };

再看一个草案中对比的例程:

//1
//c++11
auto lambda{[&]() /*const*/ {}};
function<void(void)> func{lambda};
const auto & ref{func};
func();
ref();//C++26
auto lambda{[&]() /*const*/ {}};
copyable_function<void(void)> func0{lambda};
const auto & ref0{func0};
func0();
ref0(); //err:operator() is NOT const!
copyable_function<void(void) const> func1{lambda};
const auto & ref1{func1};
func1();
ref1(); //operator() is const!

大家想了解更多可参看P2548R6提案文档。

四、总结

C++标准的发展,其实和大家朴素的想法是一致的。整体的方向是朝着强大易用不断前进,细节上不断的完善早期标准的一些问题,以期查漏补缺。一个技术点的形成不可能是一蹴而就的,尤其是在实际的场景应用中,会不断的暴露出其一些受限的短板或者没有考虑的地方,这样就会在后续的标准中有的放矢的进行完善。
回头再想想大家自己的实际开发,是不是也是这么一个过程呢?

http://www.dtcms.com/wzjs/79676.html

相关文章:

  • 网站建设西安哪里好外贸推广平台哪家好
  • 上网建立网站布置it培训机构靠谱吗
  • 兼职网站建设招聘信息无限制搜索引擎排名
  • 企业建站1年网站关键词快速排名优化
  • 如何上传自己的做的网站seo在中国
  • 怎么做淘宝客优惠劵网站广州seo好找工作吗
  • wordpress怎么去掉谷歌字体宝鸡seo外包公司
  • 软件技术适合女生学吗seo网络推广招聘
  • 做盗版电影网站自己怎么开网站
  • 手机网站制作app在线培训
  • 客户在我这做的网站被罚大数据培训课程
  • 找做网站公司seo是什么岗位简称
  • 企业做网站服务费2345网址导航
  • 怎样的网站打开速度块郑州seo服务技术
  • 2021年十大热点事件上海知名的seo推广咨询
  • 网站广告布局技成培训网
  • 有没有做彩票直播的网站十大接单推广app平台
  • 有什么做海报网站google seo 优化招聘
  • 如何做微信商城网站建设杭州百度首页优化
  • 华企网络seo关键字优化价格
  • 海南房产网站建设营销策略国内外文献综述
  • 网站几个关键词重庆网站开发公司
  • 网络加盟网站seo教材
  • 做企业网站公司网络营销的方法
  • 做网站哪个简单点企业网站
  • 百子湾网站建设公司怎么做好推广
  • 元凤建盏简介引擎seo优
  • 国外购买域名的网站网站优化排名操作
  • 新乡网站制作脑白金网络营销
  • wordpress注册相关seo相关ppt