-1
以下是如何工作的?与右值引用的绑定函数
double doubleVal(double val) {
return val*2;
}
int main()
{
double myVal = 3.0;
double(*&&ptr)(double) = &doubleVal; // Why?
}
我不明白为什么函数地址可以被转换为右值引用..是不是一个左值?
以下是如何工作的?与右值引用的绑定函数
double doubleVal(double val) {
return val*2;
}
int main()
{
double myVal = 3.0;
double(*&&ptr)(double) = &doubleVal; // Why?
}
我不明白为什么函数地址可以被转换为右值引用..是不是一个左值?
您的代码基本上是问为什么:
using T = ...;
T someVal;
T*&& ref = &someVal;
作品。虽然someVal
是一个左值,&someVal
是prvalue,它是一种右值。任何右值都可以用来初始化右值引用。
编译器可识别的语法为一个函数指针
double(*ptr)(double) = &doubleVal;
附加&&
抵抗PTR施加,而不是其PTR的函数的性质将指向
double(*&&ptr)(double) = &doubleVal;
接受一个参考右值,而右边的东西是右值 - 它没有名称或地址,直到它存储在ptr
。
return &(&doubleVal); // warning - returning address of temporary