代码之家  ›  专栏  ›  技术社区  ›  Aryan

将引用(右值)移动到函数

  •  0
  • Aryan  · 技术社区  · 7 年前

    我在阅读一些文档时看到:

    template<class Ret, class... Args>
    struct is_function<Ret(Args...) &&> : std::true_type {};
    

    引用自: http://en.cppreference.com/w/cpp/types/is_function

    如何获得对函数的右值引用?

    据我所知,函数没有存储生存期。有人能解释一下吗?我理解引用和指针,但如何“移动”函数?

    我编写了这段代码,它按照应该的方式编译和运行:

    #include <iostream>
    using namespace std;
    
    int foo(int num) {
        return num + 1;
    }
    
    int main() {
    
        int (*bar1)(int) = &foo;
        cout << bar1(1) << endl;
    
        int (&bar2)(int) = foo;
        cout << bar2(2) << endl;
    
        auto bar3 = std::move(bar2); // ????
        cout << bar3(3) << endl;
        cout << bar2(2) << endl;
    
        int (&&bar4)(int) = foo; // ????
        cout << bar4(4) << endl;
    
    }
    

    让我们假设您是否可以将函数作为字节码/操作码存储在内存中,并将其“移动”。CPU不会阻止它运行吗?

    编辑:@NicolasBolas纠正了我的误解,但下面是我另一个“问题”的答案: rvalue reference to function

    1 回复  |  直到 7 年前
        1
  •  4
  •   Community SqlRyan    4 年前

    如何获得对函数的右值引用?

    那不是什么意思。

    这个 && 在…的结尾 Ret(Args...) && 指的是 a member function to have an rvalue this . 因此,专门化适用于具有 Ret 作为返回值, Args 作为其参数,并使用右值 .

    所以它不是“对函数的右值引用”。它是一个取右值的函数 .