Я играю с лямбда-выражениями, и я использую auto
в качестве входного параметра.возвращаемые значения из lambdas с автоматическим параметром
я попробовать этот код ниже
auto f2 = [](auto a){ return a;};
std::cout << f2(10) << std::endl;
std::cout << f2("hi there!") << std::endl;
С моим большим удивлением он компилирует и запустить нормально! Как это возможно?
Если я не ошибаюсь (это поставляется с C++ 14), то объект-объект operator()
является шаблоном, поскольку в качестве входного параметра он использует auto
.
Как он управляет несколькими типами возврата? Первая строка возвращает int
, а вторая строка возвращает const char*
.
Является ли компилятор, создающий несколько operator()
за кулисами?
Как бы вы написали эту лямбду как шаблон функции? – chris
Я не думаю, что стандарт предусматривает, как объекты функции должны быть реализованы. То есть, они не ограничиваются основанием для шаблонов или функторов старого стиля. –
_I компилятор создает несколько 'operator()' за кулисами? _ Да, шаблон функции создает другую функцию каждый раз, когда она создается с помощью другого аргумента шаблона. Лямбда не делает ничего особенного. – Oktalist