重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“C++的std::forward怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++的std::forward怎么使用”吧!
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、重庆小程序开发公司、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了济阳免费建站欢迎大家使用!
If the object is to be passed onward to other code and not directly used by this function, we want to make this function agnostic to the argument const
-ness and rvalue-ness.
如果对象不在本函数内部使用而是继续传递给其他代码,我们希望本函数不会改变参数的常数特性和右值特性。
考虑下面的函数:
string f(string&& s){ if(s.size()) s[0]=toupper(s[0]); return s}
右值引用作为参数类型使用的时候,首先被实参初始化,其结果是实参将无效化(右值引用的定义)。在函数内部,由于s已经夺取了实参的内容,因此可以作为左值自由使用。但是如果不是在函数体中直接使用而希望作为右值继续传递给另外一个函数,就不能直接使用s作为实参(因为它已经变成了左值引用),而是使用forward恢复它的右值特性。
在这种情况下,也只有在这种(右值引用参数只传递不使用)情况下,将TP参数定义为TP&&(这里TP是模板类型)--这样可以无视并维持常量特性和右值特性。因此任何使用TP&&的代码声明了它不在乎变量的常量特性和右值特性(因为已经被忽略),但会将该值(不加改变地)继续传递给其他不在乎常量特性和右值特性的代码(因为这些特性会被维持)。因为任何从调用者传来的临时对象都会在函数调用期间保持有效性(原因是调用者只有在函数调用之后才有机会销毁这个对象),因此当TP&&被作为参数(在函数内部)使用时是安全的。TP&&类型的参数本质上总是应该在函数体中通过std::forward继续传递的。
译者注:最终还是要被某段代码作为左值使用的。
templateinline auto invoke(F f, Args&&... args) { return f(forward (args)...);}
到此,相信大家对“C++的std::forward怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!