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

0

  1. 1
  2. 2
  3. 3
bool Buffer::ReadData(const QByteArray &array){
    return this->ReadData((char*)array.constData(), array.size());
}

Без комментариев
0_o

Запостил: ir4y ir4y, (Updated )

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

  • 1. this-> - ну это на любителя - я бы не писал.
    2. char* и ByteArray
    3. вопрос еще, что readdata(char*, int) делает.
    Ответить
    • ну ReadData - очевидно, пытается прочитать size_t байт в область памяти char *, доступную к записи
      но array - константный, даже метод constData какбе намекает
      Ответить
      • да, действительно.
        честно говоря, я бы назвал ReadFromBuffer, чтобы даже в конце рабочего дня у нового разработчика не возник вопрос: "Откуда и куда читается?"
        Ответить
    • bool ReadData(char *array,uint count);

      Читает данные в array, количеством не более count,
      в случае успеха возвращает true
      в случае ошибки false
      Ответить
      • кстати, плохой интерфейс
        неплохо бы возвращать сколько на самом деле было прочитано
        Ответить
    • Мне кажется что при обращении к методам класса надо явно указывать что это метод класса.
      Иначе непонятно где методы, а где функции не из класса.
      Ответить
      • все же ты пишешь на С++, и отдельно висящие функции (даже как static в .cpp файле) нечасты - поэтому обычно понятно, где методы, кроме того, вот такие вот функции обычно прячут в namespace detail
        однако "this->" у тебя иногда насильно затребует гцц
        http://govnokod.ru/8820#comment125273
        Ответить
          • Вот в том то и дело, что по стандарту
            Как я тогда показал в ссылке на ideone (http://ideone.com/VaMKR), можно добиваться очень неожиданных результатов.

            Логика этого правила понятна - когда я пишу шаблонную функцию t<...>() и использую в нем функцию f(), я знаю какую функцию f() я имею в виду, и компилятор обязан знать. В будущем, когда t будет инстанциирована, компилятор не позволит вызвать иную, более локально определенную, f().

            Но вот кое-кому было лень в это правило прописать другой подход, когда описывается метод класса, который сам наследуется от шаблонного класса - что, если у нас внезапно обнаружится отнаследованный подходящий метод f() у базового класса? Может стоит, все же, взять его? Более того, что, если глобально определенных функций с аналогичной сигнатурой даже нет? Гцц выдаст ошибку "поставь this->, дружок, или я так не играю". А вот студийному компилятору не сложно работать не по стандарту, а по здравому смыслу - если программист желает именно вызвать не_метод, ему будет не сложно написать ::f() (тем более, что это действительно редкий случай), в противном - не нужно его напрягать с this-> на каждый чих - ведь наследоваться от somebase<T> и использовать его методы приходится гораздо, гораздо, гораздо чаще.

            И кстати, clang в этом случае на стороне стандарта, т.е. gcc.
            Ответить
      • если уж так хочется явно показать, хотя не понятно зачем (функций класса обычно намного больше отдельных несистемных функций), то можно написать ::TestFunction();
        Хотя, вопрос спорный:)
        Ответить
  • ф!E.S W!Z,L"B!A.A?P:Y?F.C JC!S:J F"F(IQ?R?U)Z)C:X?E$H!XNND(K:M,Y:R B)K.G.J$F)H(X!D$Z?R:F)U"RO:M.B)E!Y(L!R D:B(Y U Q"H D.I D$G:FU!U$Z"P:B B!Y E R,G"I:M(K T,U O?J,L(S S!W!R)Q?Q"X,F,O,C,Y:I$W)GO(K"I"I!H(K)D,V"J)G,U(V:F!SU?G"K!A?U W)N,L?C)P$L$I?K:C)R!C.F,C)FV$S)N.U?R?T V:G"U A)F,K!K:W)H)Z?I)D.T:C:O Z!F:X:U,O$L:V:K?Y P!B)X!W:W!PC:W(T(Y)A:O.D:J,M.G)V$N,O"I?C$N Y?Q)I$Y.NF$L!BBO"I?A:K)L!D)N L:Q:O?W?P?T:P,X(A!S.D D$W:B(R:Y E$B!V:Q"YСRMNUSYYONPLGUVUKQOAUWCCHLGTLKRLKSNBC
    Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8