На собеседовании задали вопрос - Что делает данный код?
int main(){[](){}();}
Правильный ответ: ничего не делает.
А означает он следующее:
int main() // Функция main без аргументов.
{
[] // Объявление лямбда-функции без списка захвата...
() // ... с пустым списком аргументов ...
{} // ... и пустым телом, ...
(); // ... которая тут же вызывается.
}
Данная программа просто возвращает 0 в вызывающую программу. Находящийся в теле программы вызов лямбда-выражения может быть проигнорирован, то есть для него не будет сгенерировано никакого объектного кода, так как это выражение не имеет побочных эффектов.
Поэтому программа не имеет смысла.
A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling std::exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing return 0;
– Monah Tuk Dec 23 '15 at 09:05main. Насчет генерации объектного кода тут вопрос, ибо без оптимизации код будет. Проверено на godbolt
– αλεχολυτ
Dec 23 '15 at 09:11
void), main в соответствии со стандартом при отсутствии return вернёт ноль. Компилятор может проигнорировать, т.е. "выкинуть" код, не имеющий эффекта.
–
Dec 23 '15 at 09:15
an actual implementation need not evaluate part of an expression if it can deduce that its value is not used and that no side effects affecting the observable behavior of the program are produced.
– αλεχολυτ
Dec 23 '15 at 09:29
Как уже все ответили -- пустая лямбда.
А использоваться может в каком-нибудь configure, перед сборкой переносимого проекта для уточнения свойств системы при автоматической генерации, например, configure.h
Судя по всему объявляет пустую лямбда-функцию и выполняет ее.