Кресты / Говнокод #8132 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
const static int m=5, n=5;
int matrix[m][n];
cout << 1[2[matrix]];

Пруй:

http://ideone.com/bO5Gn

Запостил: RS-232 RS-232, (Updated )

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

    • так не терпелось опубликовать эту хрень, что по клавиатуре не попадал. a[i] = *(a + i)
      Ответить
        • Да, я тоже читал великую "The C Programming Language". Однако в другой ветке утверждают, что тут из-за перегрузки операторов ассоциативность сложения нарушилась.
          Ответить
          • внизу наверно сильно удивятся когда узнают, что [] ввели чисто для удобства... после чего получили такой интересный эффект.
            Ответить
    • У него оператор сложения перегружен и от перемены мест слагаемых сумма меняется =\
      Это рак
      Ответить
    • так делают, чтобы не вызвался перегруженный оператор для matrix, а вызвался настоящий. Это единственный способ уберечь себя от попадания в просак с перегруженным оператором. (:
      Ответить
        • Да врёт он всё. Для встроенных типов операторы не переопределяются.
          Ответить
            • типа: сам ям нарыл, сам в них прыгаешь с разбегу?

              на кой хер народ все подряд перегружает?... если можно не значит что нужно.
              Ответить
              • >на кой хер народ все подряд перегружает?
                А я то откуда знаю. Это не мои проблемы. Я то так не делаю. Может BOOST::Spirit 2.0 делали? Там это к месту. Только сам Spirit вообще нигде не к месту.
                Ответить
      • Если чё я говорю про перегруженный оператор индексного доступа. Менять местами имя "массива" и индекс - способ защиты от такой перегрузки.
        Ответить
      • Какой ещё перегруженный оператор для matrix? Не бывает (по крайней мере в C++).
        Ответить
        • В данном случае нет, а вот в смартпоинтерах, кастящихся до указателя это возможно.
          Ответить
            • >>Где здесь смартпоинтеры?
              >В данном случае нет

              Я просто привел пример, где это возможно. К теме говнокода это не относится почти.
              Ответить
  • Вы ещё приглядитесь, как к 2ух-мерному массиву хитро обращаются: Как к 2ум одномерным.
    Ответить
    • XXXGovno, а на каких ещё языках ты пишешь программы, кроме C/C++? @Esper вон лисп ещё знает (и любит), @gegMoro4 полиглот: знает как минимум ещё Java и Python. А на чём ещё пишешь ты?
      Ответить
      • По работе: С, С++, C++\CLI, C#, F#, Assembler (Повсеместное засилье этих языков меня просто выбешивает. Я про Си-группу и от них никуда не уйти, тк другие никому не нужны. Тарас меня должен понять)
        Просто изучал\пописывал для себя: D, Python, Prolog, СL, Elrang, Scala, Boo, Objective-C, OCaml (Из этой группы понравились первые 6, но есть некоторая неприязнь к динамически-типизированным языкам, тк люблю проверяющийся на этапе компиляции код, 7ой - понравился, но пока не пригоден для профессионального использования)
        Хочу ещё попробовать Haskell, Nemerle ну и ещё некоторые, где-то составлял список языков к изучению на харде.
        Ну и никому не говорите, что я писал на Turbo Pascal 7.0.
        И ещё есть языки, что пользуются популярностью: Java и в нашем городе ещё Delphi и 1С. Первый я смотрел, но писать на нем не хочу, тк мало синтаксического сахара и приходится писать много лишнего. На втором я тоже долго писал, но тоже Тссс. И без комментариев. 3тий язык - также без комментариев и я на нем не писал ^_^ .

        Люблю выразительные языки, где малым можно сделать многое и при этом все читаемо.
        Ответить
  • Итак, что мы имеем... Сначала программисты на C++ создают абстракцию, вводя перегруженный оператор доступа по индексу, а потом пишут непонятный с первого взгляда код для того, чтобы избежать использования этой абстрации (видимо, не доверяют коллегам). Отличная идея. Продолжайте в том же духе.
    Ответить
      • Что-то какой то слабенький у вас С++. Все возможно. Читайте выше.
        Ответить
          • А что, лично у вас уже были такие прецеденты? Осторожнее с анашой нужно.
            Ответить
            • от манов люди только умнеют
              людей от них не штырит, если употреблядь по назначению врача
              Ответить
    • Чёрт, а в Аде нельзя перегружать оператор взятия элемента по индексу. Вместо a(i) приходится писать что-то типа a.el(i)
      Ответить
      • А в Scala вообще упразднили особый синтаксис для взятия элемента по индексу. Вместо этого используют функторы:
        val numbers = Array(1,2,3,4);
        println( numbers(0) );       // hey, ma! every array now is just a functor.
        println( numbers.apply(0) ); // the same result: 1
        Ответить
        • Одна из ошибок большинства языков — квадратные скобки для индексации. В этом совершенно нет надобности.
          Ответить
          • А вот языки матпакетов Mathimatica и по моему Maple считают, что квадратные скобки [] следует использовать так:
            func[параметры]. Это позволяет зрительно отличить вызов функции от круглых скобок, предназначенных для записи выражений (((100(x+23))+2)) и тд, иначе вызов функции в такой кутерьме скобок может теряться и читабельность снижаться.
            Ответить
          • Мне очень понравилась эта идея в Scala - все массивы коллекции реализуют PartialFunction, так получается однородный и выразительный подход.
            assert( Set(1,2,3)(3) == true ) // Set.apply == contains
            assert( Map('1' -> 'a')('1') == 'a' ) // Map.apply = get
            Ответить
            • Зато в С++ функтор может быть одновременно массивом и функцией. :-p
              Ответить
                • Да абсолютно ничего.
                  Вы так говорите, как будто мой настоящий ник не знаете. (:
                  Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8