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

    +15

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    for(int y=0; y<height; ++y)
    {
         for(int x=0; x<width; ++x)
             b[y,x] = a[y,x];
    }

    Запостил: LispGovno, 12 Ноября 2012

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

    • А ещё вопрос на засыпку:
      //1)
      a = (1, 2, 3);
      b = 1, 2, 3;
      //2)
      a = min(1, 2, 3);
      b = min((1, 2, 3));

      Что будет в обоих случаях с a и b?
      Ответить
      • В случае 1, очевидно, a = 1, b = 3.

        Во втором случае - ошибка компиляции (ага, std::min принимает два аргумента).
        Ответить
        • Тьху, наоборот. a и b местами попутал.
          Ответить
          • > std::min
            А ты видешь там std? Очевидно функция принимает произвольное число параметров.
            Ответить
            • Хм. А обычно ведь народ делают using namespace std... и приплыли?
              Ответить
              • > обычно ведь народ делают using namespace std
                Но только на лабах.
                Ответить
                • 1. не всегда только на лабах, увы.
                  2. обычный min ваще-то как макрос определен. Но ХЗ. Это какой-то compiler-specific загогулин получается. См. http://sydney.edu.au/engineering/it/~kev/pp/RESOURCES/cplusplus/ref/cstdlib/min.html
                  А у меня в cstdlib его вообще нет...
                  http://ideone.com/Uk8744
                  Ответить
                  • это windows.h макросами min и max запросто грешит, что конфликтует с std
                    если не указать NO_MIN_MAX или не писать (std::min)(a, b);
                    Ответить
            • >произвольное число параметров
              Один относится к произвольным числам? В таком случае в b будет 3.
              Ответить
      • [color=pink]А что, С++ уже поддерживает кортежи?[/color]
        Ответить
        • Только после перегрузки оператора () :-)
          Ответить
          • std::make_tuple
            Ответить
          • оператора (,) же
            Ответить
            • Такого оператора нет, а если имелась ввиду оператор запятая, то это вроде не возможно, хотя я не пробовал. Она любит, чтобы типы от запятой к запятой не менялись. Точнее не позволит сохранить типы.
              Ответить
              • что не возможно?
                operator , перегружается
                просто на с++ идеально красивой конструкции все равно не получишь - придется сначала использовать свой объект
                например myobj(arg1), arg2, arg3, arg4
                или myobj += arg1, arg2, arg3, arg4
                Ответить
                • http://ideone.com/OCAkDX
                  Ответить
                  • Не бро, кортеж напиши. Ты в каунтере типы шаблонные не сохраняешь Такой чтоб в результате tuple<int, char и тд> получился. Можешь использовать std::tuple
                    Ответить
                    • говноссылка была просто как пруф, что operator , перегружаемый и не требует одинакового типа в своей записи

                      ты это просил? http://ideone.com/Wk1bcA
                      Ответить
                      • Сильно! std::tuple_cat - это не поддерживает даже Хаскель. С++ снова победил.
                        #include <iostream>
                        #include <tuple>
                        #include <string>
                         
                        template <class... ArgsL>
                        struct tuple_maker {
                            typedef std::tuple<ArgsL...>    tuple_left;
                            tuple_maker(tuple_left const & tl = tuple_left()): tuple_(tl) {}
                            
                            tuple_left  tuple_;
                            
                            template <class ArgR>
                            tuple_maker<ArgsL..., ArgR> operator , (ArgR const & r)
                            {
                                return std::tuple_cat(tuple_, std::make_tuple(r));
                            }
                            
                            operator tuple_left & () { return tuple_; }
                        };
                         
                        tuple_maker<> tuple_of() { return tuple_maker<>(); }
                         
                        int main()
                        {
                            std::tuple<char, double, int>  mytup;
                            mytup = (tuple_of(), 'a', 145.21, 100);
                            return 0;
                        }
                        Ответить
                        • бгг, все ж таки скопипастить код из идеоне на уютненький бывает имеет смысл, что бы ни говорили завистники
                          Ответить
                          • А то! Тут же все ленивые.
                            А у 90% даже синие сцылки не открываются.
                            Стоп. Так у тебя там обычный текст, а не ссылка. Понятно.
                            Ответить
                            • Да, некоторым лень сконфигурить libastral. Тем более, он врядли портирован по айпад Дефекейстры.
                              Ответить
                              • как ты неровно дышишь к айпаду то :)
                                выйди из шкафа уже
                                Ответить
                                • К айпаду я равнодушен, мне просто нравится как звучит слово "Дефекейстра". Надеюсь, вы не воспринимаете благозвучную ассоциацию с тем самым учёным как оскорбление.
                                  Ответить
                                  • > К айпаду я равнодушен
                                    первая стадия - отрицание

                                    ко мне можно на ты
                                    а то я начинаю себя чувствовать неуютно
                                    Ответить
                                    • Я не против продукции Apple, у них неплохой дизайн и конфигов меньше, и есть практически всё, что нужно юниксоиду (нет вроде стандартного менеджера пакетов, но люди прикручивали). Политика партии, правда, огорчает.

                                      Скажем так, если бы мне подарили последний MacBook, я бы с удовольствием им пользовался, но сам покупать не горю желанием. Я не яблоненавистник, но и не фанат.

                                      А планшет мне просто не нужен: ни iPad, ни GalaxyTab. Мои нужны вполне удовлетворяет электронная книга PocketBook с E-Ink.
                                      Ответить
                                      • > Я не яблоненавистник, но и не фанат.
                                        Позиция здравого человека, в интернетах бытуют 3 мнения:
                                        яблофанаты, говнохейтеры, и луркмор.
                                        Ответить
        • с [color=pink] надо было писать так:
          "Мальчики, а что, С++ик уже поддерживает кортежики?"
          Ответить
          • Тег забыл закрыть, вся страница ниже розовая.[/color]

            [color=pink]Вот.[/color]
            Ответить
            • У меня, кстати, не розовая. Поставил расширение PinkPageFixer 9000, всем советую.
              Ответить
              • Тоже поставил. Сняли 600 рублей за смски, но зато теперь розовые теги видно.
                Ответить
            • а помнится раньше хороши чятики рушились посылкой </html>
              Ответить
          • Как-то раз одна злая девочка забыла закрыть кавычки и до конца жизни говорила с сарказмом. Duran.
            Ответить
    • -погорячился-
      Ответить
      • Что с тобой случилось? Рассказывай, мы попробуем помочь. ;)
        Ответить
    • > b[y,x]
      Лолшто?
      Ответить
      • как можно ... паскализм крестоблядства какой-то ... да?
        Ответить
        • Код некомпилирующийся.
          Автор гумно.
          Минус.
          Ответить
          • > Код некомпилирующийся.
            А теперь скажи это компилятору.
            Ответить
            • Сказал, не компилирует.
              Ответить
              • Если добавить немного определений, то вполне
                http://ideone.com/kV8VDz
                Ответить
                • Ну кто ж так массивы в си объявляет. Надо же двумерные:
                  http://ideone.com/AN4flT
                  Ответить
                  • Что это за хуйня? Пара в качестве индекса?
                    Тьфу, врубился.
                    Сишкоблядство какое-то, тьфу!
                    Ответить
                  • Да, у вас немного джвухмернее
                    Ответить
                • Ох чертяка!
                  Хотел посмотреть что там, написал cout<<b[y,x] ПОСОНЫ КОНСОЛЬ РАСПИДОРАСИЛО, НЕ ПЕЧАТАЙТЕ.
                  http://ideone.com/gLfDFd

                  Ну вообще-то
                  а)есть ворнинг
                  >prog.cpp:10: warning: left-hand operand of comma has no effect
                  б) в js тоже так можно
                  new Array([],null,undefined,null) == ",,,";
                  Ответить
                • Обращение к одномерному массиву по двойному индексу?
                  А, я понял, первый игнорируется, потому что оператор запятая возвращает второй элемент.
                  Ответить
                  • >оператор запятая возвращает второй элемент.
                    Последний
                    Давно известно всем кто пишет на Js
                    ",,," == Array((null,'shit',false,NaN,4));
                    (alert('shit'), 42);
                    Так что проблема не только в крестах, а гумно получило заслуженный минус.
                    Ответить
                    • А тогда почему f(1,2,3) это не f(3)?
                      Ответить
                      • скобки надо добавить: f((1,2,3))
                        Ответить
                      • Потому что синтаксис такой.
                        f(1,2,3); // нормальный вызов с тремя параметрами
                        f((1,2,3)); // вызов с одним параметром 3
                        int x = 1,2,3; // ошибка компиляции
                        int x = (1,2,3); // x = 3
                        Ответить
                        • int x = 1, y = 2, z = 3;
                          Ответить
                        • Ещё случай:
                          int x, y;
                          y = (x = 1, 2, 3);

                          x будет равен 1, исходя из приоритета операторов; а y — 3, исходя из возвращаемого значения оператора «,»..
                          Ответить
                      • var x={a:1,b:2};
                        console.log(x['a','b']);
                        А вот тебе с квадратными. @absolut выше правильно тебе подсказывает.
                        Ответить
    • показать все, что скрытоГовнокод не торт, такого оператора [] в С++ нет.
      Ответить

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