2015-06-10 2 views
-1

Как работает следующее?Функция привязки к значению rvalue

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

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

Я не понимаю, почему адрес функции может быть преобразован в ссылки RValue .. это не именующий?

ответ

1

Ваш код в основном спрашивают, почему:

using T = ...; 
T someVal; 

T*&& ref = &someVal; 

работы. В то время как someVal является lvalue, &someVal является prvalue, что является своего рода rvalue. Любое значение rvalue может использоваться для инициализации ссылки rvalue.

1

Компилятор распознает синтаксис как указатель функции

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

Дополнительное && применяется против PTR, а не свойства функции, к которой PTR будет указывать

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

принимает собой ссылка на rvalue, а вещь справа - rvalue - у нее нет имени или адреса, пока он не будет сохранен в ptr.

return &(&doubleVal); // warning - returning address of temporary 
Смежные вопросы