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

    +5

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    float data1[16];
    float data2[16];
    
    for (unsigned i = 0; i < 4; ++i)
        for (unsigned j = 0; j < 4; ++j)
            *(data1 + 4 * i + j) = *(data2 + 4 * i + j);

    Запостил: jangolare, 26 Августа 2015

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

    • Красиво
      Ответить
      • Семантичненько. Сразу видно, что матрицу 4х4 копируют, а не просто какую-то хуйню из 16 элементов.
        Ответить
        • Это, безусловно, красиво, но немного затратно по времени. Хотя, может gcc всё оптимизирует?
          Ответить
          • да/нет.

            на 64 бит интеле, gcc это в 4 переприсваивания с SSE инснами переделал.

            а вариант с memcpy(data1, data2) был съоптимизирован в 8 переприсваниваний обычными инструкциями...
            Ответить
            • Т.е. этот код ещё и оптимальнее, чем memcpy? :)
              Ответить
              • но только в gcc-шном смысле слова "оптимальнее".

                ихнюю багзилу лучше не читать, потому что очень мрачно.
                Ответить
        • Не помню - а в сях есть тру 2 мерные массивы (типа сахарок для одномерных с 2 индексацией) или только массив ссылок на массив ссылок на.. и тд
          Ответить
          • Они есть, но они не тру. Как и в крестах. Все размерности кроме первой должны быть константными.
            Ответить
            • Зубчатые без сахарка?
              Ответить
            • При этом сам массив свои размерности не знает. Они хранятся только в компайл-тайме и используются только для вычисления множителей при индексах.
              Ответить
          • Есть Qt-шные QVector2D/QVector3D/QVector4D
            И набор разных QMatrix
            Ответить
            • В c/c++?
              Ответить
              • а Qt что, уже не c++? Я не помню, чтобы его выделяли в отдельный язык...
                Ответить
                • А с каких пор Qt вошло в стандартную библиотеку си или крестов?
                  Ответить
                  • А с каких пор у с/с++ появилась стандартная библиотека в современном смысле?
                    Ответить
                    • С тех пор, как буст запилили (его смело можно считать стандартной библиотекой крестов).
                      Ответить
                      • но куте же было раньше. Я помню, читал про биндинг PyQT и помню строчки "а эту треть или половину библиотеки мы рассматривать не будем, т.к. она дублирует функционал встроенной библиотеки питона"
                        Ответить
                        • > питона
                          Жабы, на самом деле. Но не суть.
                          Ответить
                          • >читал про биндинг PyQT

                            Типа более-менее комфортная стандартная библиотека пошла с явы?
                            Ответить
                            • Ну я вот когда полизал жабу после Qt, мне там всё показалось настолько знакомым...

                              Например у строк все эти indexOf(), contains(), startsWith() совпадают с точностью до написания.
                              Ответить
                              • а у шарпов названия другие, хотя суть та же. Может именно по этому у меня пропадает все желание крестоблядить?
                                Ответить
                              • > всё показалось настолько знакомым
                                И идеология вроде как в Swing - рисуй все виджеты сам.
                                Отличие в том, что жабьи виджеты в общем случае более тормозные и убогие.
                                Ответить
                                • >И идеология вроде как в Swing - рисуй все виджеты сам.
                                  Мсье ошибается - в Qt есть графический конструктор.
                                  Ответить
                                  • > Мсье ошибается - в Qt есть графический конструктор.

                                    Мсье не понял, о чём речь. И Qt, и Swing не используют родные виджеты операционной/оконной системы, а рисуют все кнопки и менюшки сами.
                                    Для Swing тоже есть конструктор, и не один.
                                    Ответить
                  • В стандартной библиотеке даже таймеров нет. И никто одним лишь std при написании c++ кода не ограничивается
                    Ответить
    • Где здесь C++? Это же няшная сишка.
      Ответить
      • Разве в сишке можно for(unsigned i = ...
        ?
        Ответить
        • C99.
          Ответить
          • В c99 уже можно? Нам давали что так нельзя и это было уже гораздо позже 99.
            Ответить
            • https://ideone.com/3uH6xx
              Ответить
              • зин6хх?

                Хз, а чего нам так давали-то... Чай не рашка какая-нибудь, где сдвигами умножать учат.
                Ответить
                • [Flags]
                      internal enum Обучение
                      {
                          Учился_в_жопе,
                          Обучался_у_жопы,
                          Обучался_жопой
                      }
                  ...
                  Обучение пидар = (Обучение)7;
                  ...
                  Ответить
                  • Для тебя обучение - это пидар? И он учил тебя в жопе?
                    Ответить
                    • Пидар - это пидар
                      Ответить
                    • Даже концепцию типов не осилил. Не обучение - это пидар, а пидар - это обучение
                      Ответить
            • Можно. Просто всякие вижуалки до сих пор все фишки с99 не осилили. Ну а преподы поди ещё по K&R учились, и про стандарты вообще не знали.
              Ответить
              • Это ещё мягкий вариант. Бывает, что препод учился ещё на Фортране и боится в других языках использовать фишки, которых в Фортране не было.
                Ответить
                • Друг рассказывал, что препод по фортрану заставлял их называть переменные i2, i3, i5 и т.п. И не засчитывал лабу, если там нормальные имена.
                  Ответить
                  • Как то раз ко мне прикопались из-за того, что переменная в цикле не i. Потом оказалось следующие - когда сдают чужие лабы многие просто ренеймят все переменные - в том числе и i - и поэтому препод решил, что я сдаю чужое.
                    Ответить
                  • Кстати, в Фортране по умолчанию переменные, имена которых начинались с букв I, J, K, L, M, N, считались целыми, а остальные — вещественными. Поэтому даже функция вычисления логарифма была переименована в ALOG, чтобы сразу было видно, что результат нецелый. И наоборот, к каким-то функциям принято было добавлять префикс i, чтобы показать, что результат целый.

                    Вероятно, именно это сломало мозг целому поколению.

                    P.S. А не так ли появилась венгерка?
                    Ответить
                    • >> P.S. А не так ли появилась венгерка?

                      Правдоподобно.
                      Вообще хорошая вещь для указания интерфейсов и элементов гуя
                      Ответить
                  • Для него в аду приготовлен специальный котел.
                    Ответить
                • У нас такого говна нету же.
                  Ответить
              • Да не, мы на C изучали синхронизацию на линупсе в сосноли с гцц.
                Ответить
              • K&R плохого не посоветуют
                Ответить
            • Ну и на фортране 77 до сих пор пишут, хотя уже немного не семидесятые.
              Ответить
    • del
      Ответить

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