zoukankan      html  css  js  c++  java
  • c++11 std::forward使用场景以及作用

    • 不使用 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<class A>
    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转发问题针对的是模板函数。

  • 相关阅读:
    国际标准化组织
    SIM卡
    苹果供应商
    iOS 调试技巧
    django进阶
    web框架django初探
    jquery
    JavaScript进阶之DOM
    html和css
    前端相关html和css
  • 原文地址:https://www.cnblogs.com/rayfloyd/p/14309276.html
Copyright © 2011-2022 走看看