Подтвердить что ты не робот

C++ странные выражения скомпилированы просто отлично

Почему следующие допустимые выражения С++? Это не lambdas

[]{}();
{}[]{};

Может кто-нибудь объяснить их мне?

4b9b3361

Ответ 1

Первый - это лямбда без списка параметров и последующего вызова. []{} эквивалентно [](){}, поэтому вся строка эквивалентна

[](){}();

Вторая - это пара фигурных скобок, которые вводят, а затем сразу закрывают область, за которой следует неиспользуемое определение лямбда без списка параметров:

{
  // empty scope
}
[]{}; // lambda

Вы можете обратиться к http://en.cppreference.com/w/cpp/language/lambda для вариантов синтаксиса лямбда-определения.

Ответ 2

  • Этот лямбда-вызов

    []{}();
    

    он эквивалентен

    [](){}();
    
  • Вторая - пустая область, за которой следует (неиспользуемая) лямбда.

Parens необязательны для лямбда без параметров.