绑定函数到右值参考

时间:2015-06-10 16:44:01

标签: c++

以下如何运作?

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

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

我不明白为什么函数地址可以转换为右值参考..是不是左值?

2 个答案:

答案 0 :(得分:1)

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

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

对ptr应用额外的&&,而不是ptr指向的函数的属性

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

接受对右值的引用,右侧的东西一个右值 - 在存储之前它没有名称或地址在ptr

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

答案 1 :(得分:1)

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

using T = ...;
T someVal;

T*&& ref = &someVal;

的工作原理。虽然someVal是左值,但&someValprvalue,这是一种左值。任何右值都可用于初始化右值参考。