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

    +63.8

    1. 1
    const size_t& len() const {return _c_str?_len:*(size_t*)0;} //нах это нужно??

    P.S. А Я САМ НЕ ЗНАЮ ГДЕ ЗДЕСЬ СИ-КРЕСТ-КРЕСТ!!!!1

    Запостил: GovnocoderJr, 02 Февраля 2010

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

    • Автор кода (тот, кто написал функцию, а не комментарий) дебил. Отправить в дошкольное учреждение на воспитание.

      А автор комментария вместо того, чтобы вставлять комментарий, лучше бы взял и исправил.

      P.S. кресты в ссылках, друк.
      Ответить
    • по контексту это каст к типу size_t
      Ответить
      • Ты это про *(size_t*)0 ? Мне кажется, это такая реализация assert, от шибко умного песателя, не знающего про "assert.h".
        Ответить
        • Да нет, это похоже кривая попытка возвратить ссылку на константу 0. Только в итоге будет AV при попытке прочитать значение.
          Ответить
          • Мне не нравится твой вариант, потому что в этом случае можно было б просто поменять тип возвращаемого значения на size_t и не было б проблем с возвращением констант. Если конечно нет ограничений на (обратную или какую-нибудь) совместимость...
            Ответить
            • Мне он тоже не нравится, но ничего более разумного тут не видится. Возвращать const size_t& тут глупость в любом случае. И эта глупость потащила за собой дальнейшие извраты.
              Ответить
              • ну никто так и не догадался. завтра расскажу нах это нужно
                Ответить
                • Мы ждём! :)
                  Ответить
                  • class string
                    {
                    private:
                    size_t _len;
                    char* _c_str;

                    public:
                    //...
                    const size_t& len() const {return _c_str?_len:*(size_t*)0;}
                    const char* c_str() const {return _c_str;}
                    Короче, длина не определена, если строки нет, вот зачем это надо (тут подразумевалось, что пользователь сначала проверит строку на нуль, а только потом будет получать длину, но на всякий случай сделана защита от дурака)
                    Ответить
                    • Я же говорил про собственный assert, он же "защита от дурака" ;-) Вопрос, почему не сделать

                      size_t len() const
                      {
                      assert(_c_str);
                      return _c_str ? _len : 0;
                      }
                      Ответить
                      • Ну или исключение кинуть, если в релизе тоже проверять надо. Хотя бы понять проще будет, если программа в этом месте упадёт.
                        Ответить
    • Где здесь Схх?
      Ответить
    • показать все, что скрытоvanished
      Ответить

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