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

    +151

    1. 1
    typedef std::basic_string<unsigned short> wstring;

    вот, надыбал в одном из подпроектов большого проекта.

    Запостил: DarthBobr, 31 Августа 2010

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

    • Придется обойтись без using namespace std;
      Ответить
    • wstring это алиас для unicode-строк в с++
      не гк
      Ответить
      • только вот объявлен он для wchar_t, а не для unsigned short
        Ответить
        • wchar_t и есть 16битное беззнаковое число.
          Ответить
          • Почитайте на вики что ли. Ссылка ниже есть.
            Ответить
      • Докажи мне, что sizeof(unsigned short) == sizeof(wchar_t).
        Иначе -- платформо- и компиляторозависимый гк.
        Ответить
        • Да это всё из-за дебильных названий типов.
          Назывался бы он uint16, вопросов бы не было.
          Ответить
        • В виндах это условие sizeof(unsigned short) == sizeof(wchar_t) выполняется. Насчёт платформонезависимости - а с чего вы взяли, что о ней в данном случае вообще стоит вопрос?
          Ответить
          • Ознакомьтесь http://ru.wikipedia.org/wiki/Wchar_t
            Ответить
          • если правильно припоминаю, потому что там в Виндах wchar_t уже не живой Юникод, а как бы UTF-16. другими словами: как обычно все через жопу.

            а вот как раз на Юнихах wchar_t есть 32 бита потому что живой Юникод без кодирования и заморочек (потому что весь Юникод в short не помещается). А если надо что-то компактнее, то UTF-8 поддерживается повсеместно.
            Ответить
          • Это везде выполняется, wchar_t стандартный 16 битный беззнаковый тип. Хотя линукс круче всех и построили свой стандарт. Воевать им интересно, а народ в итоге страдает.
            Ответить
            • Если чо, то стандарт говорит:
              wchar_t
              Integer type whose range of values can represent distinct wide-character codes for all members of the largest character set specified among the locales supported by the compilation environment:
              Ответить
            • Нет, никакой 16-тибитовости для wchar_t в стандарте не гарантируется
              Ответить
      • Этот "не гк", работал пока не пришлось его портировать с VC6 на VC2008. Тип то определен, а методы и операторы не перегружены. В итоге компилер матерится на вещи вроде
        BSTR a="1111";
        wstring b = a;
        Да и вообще, я не пойму логики пейсателя. Чем std::wstring не устраивает. Зачем писать свой велосипед?
        Ответить
    • странно, что еще никто не упомянул про std::char_traits и то, что не все code points в utf-16 занимают 2 байта. хотя... ладно, не важно, похуй
      Ответить

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