F.19: For "forward" parameters, pass by TP&& and only std::forward the parameter(对于只传递不处理的参数,使用模板类型TP&&并在传递时使用std::forward)
Reason(原因)
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.
如果对象不在本函数内部使用而是继续传递给其他代码,我们希望本函数不会改变参数的常数特性和右值特性。
译者注:
考虑下面的函数(代码来自《C++程序设计语言》):
string f(string&& s){ if(s.size()) s[0]=toupper(s[0]); return s;}
右值引用作为参数类型使用的时候,首先被实参初始化,其结果是实参将无效化(右值引用的定义)。在函数内部,由于s已经夺取了实参的内容,因此可以作为左值自由使用。但是如果不是在函数体中直接使用而希望作为右值继续传递给另外一个函数,