我想知道转发:
该标准基本上通过两个重载实现std::forward:

  • 左值转发为左值/右值(T的深度)

  • template<typename T>
    T&& forward(lvalue_Reference v){
        return static_cast<T&&>(v);
    };
    
  • 右值转发为右值

  • template<typename T>
    T&& forward(rvalue_Reference v){
        // static-assert: T is not an lvalue-Reference
        return static_cast<T&&>(v);
    };
    

    第一种情况是

    template<typename T>
    void foo(T&& a) { doSomething(std::forward<T>(a)); /* a is lvalue -> matches 1. overload */ }
    

    第二种情况很有意义,但是触发它的例子是什么?

    最佳答案

    我相信这是重复的:

    What is the purpose of std::forward()'s rvalue reference overload?

    另请阅读随附的论文:

    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2951.html

    关于c++ - 将右值作为右值转发用例吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57399435/

    10-14 09:19