-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