2015-06-10 56 views
-1

以下是如何工作的?与右值引用的绑定函数

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

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

我不明白为什么函数地址可以被转换为右值引用..是不是一个左值?

回答

1

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

using T = ...; 
T someVal; 

T*&& ref = &someVal; 

作品。虽然someVal是一个左值,&someValprvalue,它是一种右值。任何右值都可以用来初始化右值引用。

1

编译器可识别的语法为一个函数指针

double(*ptr)(double) = &doubleVal; 

附加&&抵抗PTR施加,而不是其PTR的函数的性质将指向

double(*&&ptr)(double) = &doubleVal; 

接受一个参考右值,而右边的东西右值 - 它没有名称或地址,直到它存储在ptr

return &(&doubleVal); // warning - returning address of temporary