1. C++ / Говнокод #14229

    +7

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    auto r = [&](){
    for(auto i: a)
      if(i==k)
        return f(i);
    }();

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

    Запостил: LispGovno, 14 Декабря 2013

    Комментарии (19) RSS

    • Жизнь человеку поломал.
      Ответить
    • auto r = [&](){
      //....
      }();


      ВСЕ ПРОСТО И ПОНЯТНО
      Ответить
      • Пришло время? уволиться
        Ответить
      • Просто читай [&] как function, что тут непонятного.
        Квадратные скобочки нужны для контроля передачи свободных переменных в замыкание - по ссылке или по значению.
        [&] - передавать всё по ссылке
        [=] или просто [] - передавать всё по значению
        Можно контролировать передачу на уровне отдельных переменных. Не забывай, GC тут нет, без контроля передачи свободных переменных лямбды были бы бесполезны.
        Не хватает только захвата по rvalue reference с передачей владения.
        Ответить
        • > просто [] - передавать всё по значению
          Неправда :) Пустые скобки вообще ничего не захватывает.
          Ответить
          • Да, верно, The empty capture clause, [], indicates that the body of the lambda expression accesses no variables in the enclosing scope.
            http://msdn.microsoft.com/en-us/library/dd293603.aspx
            Спасибо за замечание
            Ответить
        • в с++14 есть захват эрвелью. Теперь можно будет писать функциональный объект с анонимным типом и приватными полями с произвольными данными.
          auto a = [p=move(p), a=ko, b=42*bormand](auto c)
          {
            return (*p+a+b)/c;
          };
          auto b = a(0);
          Ответить
          • Кстати, парни, а кто знает, как в лямбды C++11 this захватывать? А то по идеи обращение в лямбде к this приведет к обращению к this лямбды.
            Ответить
            • > А то по идеи обращение в лямбде к this приведет к обращению к this лямбды.
              WTF?! Какой еще this лямбды?

              [this](){ ... } вроде бы работало, [=](){...} тоже.
              Ответить
              • Я не пробовал. Так спросил. Адрес operator() то взять у лямбды можно.
                Ответить
    • Какой тонкий тролль ;) Без vxd, в юзермоде, всего лишь 3 строчками изменил конфигурацию системы сотрудников.
      Ответить
    • http://troll-face.ru/179537/
      Ответить
    • [&](){}();
      Ответить

    Добавить комментарий