2015-02-13 3 views
4

Можете ли вы объяснить, какой тип L в этом контексте. Другими словами, какой тип я могу использовать вместо ключевого слова auto?Какая переменная, которая содержит лямбда

int main(){ 
int x=0; 
auto L = [x] (int y)->bool{ 
    return x>y; 
}; 
    return 0; 
} 
+2

Это уникальный, неназванный тип. –

+0

Ничего; 'auto' - единственный способ получить точно типизированный объект, хотя вы можете хранить лямбда в вызываемом держателе, таком как' std :: function <> '. – ildjarn

+1

@ildjarn 'decltype (auto)' работает тоже;) –

ответ

6

Там нет ничего в C++ 11, которые можно использовать вместо auto в этом контексте, что означало бы точно такой же тип. Это потому, что тип каждого лямбда-выражения является уникальным, неназванным типом. Цитирование C++ 11 5.1.2/3:

Типом лямбда-выражения (который также является тип объекта закрытия) является уникальным, безымянная тип несрастание класс - называется тип закрытия - свойства которого описаны ниже. ...

1

Вместо `auto, вы можете не хотеть использовать std::function.

This article объясняет более подробно:

Основной принцип позади авто является то, что компилятор знает тип ... но вы либо не можете описать его или не хотите. Существует один основной случай использования, где вы не можете назвать тип - с лямбдами.

В этой статье затем описывается, как вы можете использовать функцию std :: вместо этого, но со штрафной времени выполнения.

Смежные вопросы