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

    +50.4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    map<string, int> M;
    ...
    M["one"] = 1;
    M["two"] = 2;
    M["google"] = 1e100;
    ...
    // найдём сумму всех значений --- т.е. всех правых частей 
    // пар <string, int>
    int r = 0;
    tr(M, it) {
       r += it->second; 
       // (*it).first == [string], (*it).second == [int]
    }

    и это на сайте обучения программирования!!!
    http://informatics.mccme.ru/moodle/mod/book/view.php?id=492&chapterid=216

    Запостил: Novi4oK, 21 Января 2010

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

    • И че? Макрос tr тебе не нравится?
      Ответить
      • 1 + 2 + 1e100 -- ну никак не влезет в int
        Ответить
        • Скомпиль в gcc. Ему абсолютно насрать. Там в инты влезают лонговые указатели.
          Ответить
          • Ниже скомпилено в гцц. Ему не насрать.
            Ответить
    • не осилил мысль автора новости
      Ответить
    • >tr(M, it)
      {
      ...
      }
      Это точно говнокод.
      Ответить
      • С чего вдруг?
        Ответить
        • Потому что есть макросы заменяющие какие-то понятные конструкции языка, например for, да ещё и с таким ничего не значащим названием tr, то это говнокод.
          Попробуй, читая код сходу догадаться, что скрываеться за tr, не смотря на определение макроса...
          Код должен быть написан так, что-бы пробежался по нему и все понятно буквально сразу и уже можно что-то менять.
          Ответить
          • Это не часть программы, а кусок из учебника. Ранее про этот макрос было объяснение. Это учебник по stl, а не по программированию. Надо учитывать контекст.
            Ответить
            • Да без разницы. Нормальным С++ написать было нельзя? Зачем в stl Сишные дефайны? O_o Да и название говно.
              Ответить
              • Это сайт для олимпиадной подготовки школьников. В разработке ПО важно, чтобы твой код понимали другие. В спортивном (олимпиадном) программировании важна скорость и понимание кода лично тобой (ну в отдельных случаях, твоими сокомандниками). Поэтому название выбирается короткое, благо запомнить основные дефайны легко, а не понятное и развернутое, как в разработке.
                Ответить
      • Это НЕ говнокод, если его рассматривать в правильном контексте. Участники всяких олимпиад типа Google CodeJam такими макросами себе время на написание решений экономят. С учетом инициализации мапа подозреваю, что код как раз написан по мотивам одной из олимпиадных задачек.
        Ответить
    • M["google"] = 1e100;
      Не скомпилиться.
      Ответить
    • Просто меня убило, что в интовскую переменную записали гугл! Ладно просто где-нибудь, а в учебном пособии - это убийственно, или, может это они пошутили - тогда - ладно...=)
      Ответить
      • Что не так?
        Вроде в map<string, int> M; типы не перепутаны местами...
        Ответить
        • Не перепутаны, но в переменную типа инт, которая вмещает 4 байта, то есть не больше 2 ^ 31 - 1, и туда записывают 1e100 = 10 ^ 100, так что это меня не устраивает...
          Ответить
          • Что случится-то?
            Ответить
            • [user@localhost ~]$ cpp_go
              $EXE='/tmp/tmp.PNNg8UV4IH'
              Нажмите ctrl+d для компиляции
              #include <map>
              int main()
              {
              map<string, int> M;
              M["one"] = 1;
              M["two"] = 2;
              M["google"] = 1e100;
              for (auto i=M.begin();i!=M.end();++i)
              cout << i->first << "\t" << i->second << endl;
              }
              <stdin>: In function ‘int main()’:
              <stdin>:17: предупреждение: переполнение при неявном преобразовании константы
              Запуск...
              google 2147483647
              one 1
              two 2
              Ответить
    • показать все, что скрытоГде здесь С++?
      Ответить
      • Точно, это ж бейсик!
        Ответить
      • В пизде, долбоебушко :)
        Ты, бля, в С видел шаблоны, хуйло?
        Ответить
      • operator -> (member access from a pointer) - специфика С++
        ну и template
        Ответить
        • открою страшную тайну -> это еще обращение к полю структуры в си
          Ответить

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