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

    +51

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    class PrimitiveList : public QList<Primitive>
    {
    public:
        using QList<Primitive>::QList;
    
        PrimitiveList mid(int pos, int length = -1) const
        {
            auto &&list = QList<Primitive>::mid(pos, length);
            return static_cast<PrimitiveList&&>(list);
        }
    };

    Необычное использование move семантики.

    Запостил: gorthauer87, 26 Декабря 2014

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

    • Расскажите бедняге про RVO.
      Ответить
      • Фишка, что без && оно даже не компилируется.
        Ответить
        • Универсальный крестовый фикс: добавлять &, пока не скомпилируется.
          Ответить
          • Осталось совсем немного: написать препроцессор, который будет разбирать лог компилятора, добавлять в исходник & и снова отправлять на компиляцию.
            Ответить
            • Я ждал такую тулзу лет десять назад :)
              - Semicolon expected, compilation aborted.
              - Ну так поставь сам свой сэмиколон и компилируй, бля!
              Только после книги дракона осознание пришо.
              Ответить
              • Javascript как раз и ставит недостающие сэмиколоны, но его почему-то именно за это не любят. На всех не угодишь...
                Ответить
          • "//" верой и правдой служит для тех же целей. А потом начинается игра: "я постепенно раскомменчиваю код и обнажаю все твои грязные баги, один за другим; мой лог компиляции уже увеличился до 35 строк..."
            Ответить
          • template <class T, T ptr>
            struct make_call {
                static const size_t init_size = 128;
                template <class... U>
                wstring operator() (U... args) {
                    size_t curr_size = init_size;
                    wstring res(curr_size, L'X');
                    decltype(ptr(args..., &res[0], curr_size)) ret_size;
                    while ((ret_size = ptr(args..., &res[0], curr_size)) + 1 == curr_size) {
                        curr_size *= 2;
                        res.resize(curr_size);
                    }
                    return res.substr(0, ret_size);
                }
            };


            Угадай, где добавить &?
            Ответить
            • последняя строчка отклеилась

              auto GetProcessImageFileNameX = make_call<decltype(GetProcessImageFileNameA), GetProcessImageFileNameA>();
              Ответить
    • А по моему говно уже видно здесь:
      class PrimitiveList : public QList<Primitive>
      {
      public:
          using QList<Primitive>::QList;
      Ответить
      • [size=green]Убогие кресты вместо божественного хацкеля? Ублюдошный Qt вместо православного STL? Вульгарное наследование вместо аристократичного агрегирования? Скобочка как у низменного Страуструпа на следующей строке вместо скобочки как у неповторимых K&R на той же строке? Еретическая конструкция с 'юзинг' (которая делает что-то, чего я не знаю)?[/code]
        Ответить
        • > [size=green]
          > [/code]

          Я, конечно, понимаю, что Хацкель велик, и даже ненужность Qt осознаю, но зачем же так нервничать? Выпейте-ка чайку с мятой и съешьте мягких французских булок.
          Ответить
          • LOL, может это специально так подчеркивается плазменность поста и неровный почерк?!
            Ответить
        • > Еретическая конструкция с 'юзинг' (которая делает что-то, чего я не знаю)?

          Наследование конструкторов она делает, 11 кресты
          Ответить

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