C++ 将函数绑定到右值引用

C++ 将函数绑定到右值引用,c++,C++,以下是如何工作的 double doubleVal(double val) { return val*2; } int main() { double myVal = 3.0; double(*&&ptr)(double) = &doubleVal; // Why? } 我不明白为什么函数地址可以转换为右值引用。。它不是左值吗?编译器将语法识别为函数指针 double(*ptr)(double) = &doubleVal; 附加的&&

以下是如何工作的

double doubleVal(double val) {
    return val*2;
}

int main()
{
    double myVal = 3.0;
    double(*&&ptr)(double) = &doubleVal; // Why?
}

我不明白为什么函数地址可以转换为右值引用。。它不是左值吗?

编译器将语法识别为函数指针

double(*ptr)(double) = &doubleVal;
附加的&&应用于ptr,而不是ptr将指向的函数的属性

double(*&&ptr)(double) = &doubleVal;
接受对一个右值的引用,右边的东西是一个右值——它在存储到ptr中之前没有名称或地址


您的代码基本上是在问为什么:

using T = ...;
T someVal;

T*&& ref = &someVal;
工作。someVal是左值,someVal是a,这是一种右值。任何右值都可用于初始化右值引用

using T = ...;
T someVal;

T*&& ref = &someVal;