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转发问题针对的是模板函数。

  • 相关阅读:
    flutter-常见的基础组件(一)
    flutter-dart语言初识
    从零开始配置安装Flutter开发环境
    vue路由vue-router
    css秘密花园一
    mvvm实现一个简单的vue
    js常见的设计模式一
    es6 generator函数的异步编程
    es6 async和await
    模块--random
  • 原文地址:https://www.cnblogs.com/rayfloyd/p/14309276.html
Copyright © 2011-2022 走看看