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

    +911

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    TVector4 V0;
    TVector4 V1;
    TVector4 V2;
    
    //....
    //Пример компилирующегося допустимого использования:
    (V0+V1)=V2;

    Нашёл я тут мега библиотеку в инете для работы с векторами. За такое нужно бить по рукам.

    Запостил: Говногость, 20 Апреля 2010

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

    • А ведь я уже на ней пол проекта написал. :(
      Ответить
    • Не понял, как эта херня компилится? Мда, я ничего не смыслю в [этом языке, который нельзя называть по имени].
      Ответить
      • конечно не скомпилится, rvalue присваиваем значение. Адреса нет - некуда присваивать)
        Ответить
        • скомпилится, если operator= переопределить
          Ответить
          • operator= должен возвращать ссылку. не получится такое собрать.
            Ответить
            • У меня собирается.
              Ответить
              • и что на выходе?
                Ответить
                • В реализациях операторов сделал заглушки. g++ молча собирает в рабочий файл.
                  Ответить
                • это пипец.
                  если в классе определить оператор+ вида
                  class_name operator+(class_name& rhs);

                  то начинает работать код вида
                  (a+b) = c; // a = a+b;
                  (a+b); // a = (a+b);
                  то есть значение присваивается левому операнду. компилятор - gcc 4.4.4.1
                  http://pastebin.com/enxaWb2H
                  Ответить
    • Мейерс в книге Effective C++ описывает такую ситуацию. operator+ должен возвращать константное значение для запрета подобных вещей. Стандарт не читал, но вероятно там не оговаривается специально поведение в таком случае.
      Ответить
    • Я бы за такой код не только руки оторвал, а еще и голову.
      Ответить
    • Также характерный для говнокодов префикс T-.
      Ответить
      • Характерный для продуктов Борланда:-D
        Это уже о многом и говорит в "пользу" борланда.
        Ответить
        • А, ещё имена локальных переменных в капслоке.
          Ответить

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