c++11 std::forward使用場景以及作用
阿新 • • 發佈:2021-01-21
- 不使用std::forward時,下述程式碼G不管傳入什麼型別的引數,只會最終呼叫void F(int& a);
using namespace std; void F(int& a) { cout << "int& version " <<a <<endl; } void F(int&& a) { // do something cout << "int&& version " <<a <<endl; } template<classA> void G(A &&a) { F(a); } int main (int argc, char *argv[]) { int i = 2; G(i); //int& version
G(5); //int& version
return 0;
}
- 用std::forward時,G的最終調用出現差異化;
using namespace std; void F(int& a) { cout << "int& version " <<a <<endl; }void F(int&& a) { // do something cout << "int&& version " <<a <<endl; } template<class A> void G(A &&a) { F(std::forward<A>(a)); } int main (int argc, char *argv[]) { int i = 2; G(i); G(5); return 0; }
- 使用與不使用std::forward的區別:
函式模板 void G(A &&a)內部是無法知道形參對應的實參,到底是個普通變數,還是瀕死的臨時變數?
只能原封不動的完美的轉發std::forward給函式模板 void G(A &&a)呼叫的下一層函式。
所以,std::forward轉發問題針對的是模板函式。