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

    +68.9

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    class imgSeq {
    public:
    	CvSeq* faces;
    	IplImage* img;
    	IplImage* small_img;
    	IplImage* gray;
    	CvMemStorage* storage;
    	int id;
    	imgSeq() {
    		CvSeq* faces = 0;
    		IplImage* img = 0;
    		IplImage* small_img = 0;
    		IplImage* gray =0 ;
    		CvMemStorage* storage = 0;
    		id = -1; //unassigned
    	};
    };

    Хотя бы id взаправду инициализирует

    Запостил: Orfest, 15 Сентября 2009

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

    • в чем косяк?
      только разве что использовать struct заместо class
      Ответить
    • присоединяюсь.
      в чем косяк?
      Ответить
      • Инициализируются локальные переменные конструктора, а не переменные-члены класса.
        Ответить
    • прикольный говнокод.
      а ворнингов разве не выдается на такое?
      Ответить
      • да какой говнокодер смотрит на ворнинги?
        Ответить
      • Проверил, M$-компилятор ни одного ворнинга не выдает.
        Ответить
        • эх, а надо бы (
          Ответить
          • ага... помнится после того, как одна старушка высушила животное в микроволновке, в инструкциях к микроволновкам стали писать: "не сушите домашних животных"...
            это я веду к тому, что компилятор не должен отвечать за твои ошибки.
            Ответить
    • Как плюсануть??
      Ответить
    • Сори, нашол, ща зарегаюсь...
      Ответить
    • Мб сделал сначала локальные в конструкторе, потом решил перенести в класс, и старые объявления убрать забыл.
      Ответить
      • Скорее все-таки жертва копи-паста.
        Структура используется активно и повсюду.

        Ещё там до структуры стоял коммент, что поле id - только для дебага, так что я его тут же замочил. Потом оказалось, что оно по всему коду активно используется как индекс......
        Ответить
        • а может, просто подразумевались локальные копии, которые _могли_бы_ сначала создаться отдельно в конструкторе, а потом как-нибудь передаться переменным-членам класса.

          представьте, например, такой код (сорри что на Жабе но вы ж ее поймете ;)

          public class foo {
          int a;
          int b;
          int c;

          foo(int a, int b, int c) {
          this.a = a;
          this.b = b;
          this.c = c;
          }
          }

          Потом параметры конструктора заэкстракчены всей толпой: из параметров в переменные. А присваивания временно убраны как ненужные...
          Ответить
    • Нда...
      При использовании списков инициализации такие косяки попросту невозможны. Хотя списком инициализации этот "код" не спасти =)
      Ответить
    • Не говнокод, а просто полное незнание синтаксиса языка.
      Ответить
      • Да. Нужно так:
        class imgSeq {
        public:
        CvSeq* faces;
        IplImage* img;
        IplImage* small_img;
        IplImage* gray;
        CvMemStorage* storage;
        int id;
        imgSeq():
        CvSeq* faces ( 0 ),
        IplImage* img ( 0 ),
        IplImage* small_img ( 0 ),
        IplImage* gray ( 0 ),
        CvMemStorage* storage ( 0 ),
        id ( -1 ) //unassigned
        {};
        };

        А лучше даже так:
        class imgSeq {
        public:
        CvSeq* faces;
        IplImage* img;
        IplImage* small_img;
        IplImage* gray;
        CvMemStorage* storage;
        int id;
        imgSeq():
        faces ( 0 ),
        img ( 0 ),
        small_img ( 0 ),
        gray ( 0 ),
        storage ( 0 ),
        id ( -1 ) //unassigned
        {};
        };
        Ответить
        • imgSeq() : CvSeq* faces ( 0 ) {}
          Так правда что ли можно писать? O_o
          А зачем?
          В универе учили только тому, как написано во втором случае
          Ответить
    • vanished
      Ответить

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