На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 386 387 [388] 389 390 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата IL_Agent @
    Цитата D_KEY @
    Кстати, как мне в C# работать с null-terminated строками?

    Например,
    http://msdn.microsoft.com/ru-ru/library/7b620dhe.aspx

    А если не хочется копировать и преобразовывать в unicode?
      Цитата D_KEY @
      А если не хочется копировать и преобразовывать в unicode?

      А что тебе хочется ? :)
        Цитата D_KEY @
        Цитата IL_Agent @
        если бы не совместимость

        С++ был бы чем-то совершенно другим.

        А вообще есть ли нечто подобное С++, но без совместимости с Си?
          Цитата OpenGL @
          А вообще есть ли нечто подобное С++, но без совместимости с Си?

          В каком смысле "нечто подобное" ? Может D ?
            Цитата Qraizer @
            А ты не смешивай массивы символов со строками, и не будет лишнего кода.
            Повторяю ещё раз: в C не было строк, и строковые литералы - единственное, что хоть как-то на строки смахивает - тоже являются массивами символов, константными. Если ты имеешь желаение в legacy API, основанном на C-style, использовать std::basic_string<>, который именно что строки, не удивительно, что ты сталкиваешься с проблемами. Только это не проблемы std::basic_string<>, это проблемы твоего желания применить абстракцию в неприменимом для неё контенсте. Раз тебе мало куда удаётся прикрутить std::basic_string<>, значит тебе просто не нужна абстракция строки. Вот std::vector<> - это массив во всей красе, и при этом Плюсовый, а не legacy. К нему есть претензии? И к слову, на <vector>, <algorithm> и <functional> большая часть функционала std::basic_string<> реализуется запросто. Фактически из кардинальных отличий только одно: использование итераторов вместо индексов и длин.

            Цитата Qraizer @
            а тем, что это строка, а не массив! Ты их синопсисы не сравнивал, что ли? Векторый интерфейс ориентирован на удобную работу с массивом, строковый - на удобные строковые операции. И требования в ним разные по этой причине. Строковый класс может оптимизировать свою реализацию так, что бы строковые операции были максимально эффективными, вектор - на максимальную совместимость с абстракцией "массив".

            Цитата Qraizer @
            А почему, собственно-то? KILLER, вот ты прикидываешься что ли, что якобы не понимаешь, что массив, строка и поток - это три разных сущности? По-твоему Стандартный класс должен быть настолько жирен, чтобы вмещать всё что душе угодно? А почему дата у тебя типа long, а не struct tm? С какой стати не учитываются пользовательскые предпочтения по форматированию даты? Давай в этот класс ещё и <locale> запихаем.
            KILLER, подтяни свои скиллы в декомпозиции. Раз уж тебе потребовалась абстракция, которая ещё и дуде игрец, так напиши да пользуйся. STL вот она вся в твоём распоряжении.

            Ок, зайдем с другой стороны. Почему бы всетаки не сделать нормальную обратную совместимость с С-строками, и предъявить теже гарантии реализации что и вектору? Я не вижу ни одной причины, чтобы сделать std::string так, чтобы он оперировал с массивом сиволом, тогда не нужно было бы прибегать к костылю в виде вектора. Почему не сделали так?

            Добавлено
            Цитата Qraizer @
            Та тем, что это строка, а не массив! Ты их синопсисы не сравнивал, что ли? Векторый интерфейс ориентирован на удобную работу с массивом, строковый - на удобные строковые операции. И требования в ним разные по этой причине. Строковый класс может оптимизировать свою реализацию так, что бы строковые операции были максимально эффективными, вектор - на максимальную совместимость с абстракцией "массив".

            Вода... необоснованое оправдание существующей функциональности, не более. В С работают с массивами, и не паряца, неужто строку в виде дерева или списка удобнее представить и работать с ней? :wacko:
              Цитата IL_Agent @
              В каком смысле "нечто подобное" ? Может D ?

              Сначала хотел ответить нет, но потом подумал, что если совместимость полностью убрать, то что получится - представить сложно. Может, и D. Вобщем, это был глупый вопрос :)
                Цитата OpenGL @
                Сначала хотел ответить нет, но потом подумал, что если совместимость полностью убрать, то что получится - представить сложно.

                Получаца костыли типа как при работе с std::string, шаг влево, шаг вправо - пиши костыль, извращайся через вектора, делай темповые массивы на статике, в общем получается неодностилевый говняный код, в котором идет смесь кода С с С++, что со стороны выглядит ужасно.
                Сообщение отредактировано: KILLER -
                  Опять 25? Все же вроде уже объяснили. Да и как как связано то, что ты процитировал с тем, что ты написал - непонятно.
                    Цитата OpenGL @
                    Опять 25? Все же вроде уже объяснили. Да и как как связано то, что ты процитировал с тем, что ты написал - непонятно.

                    Где объяснили? Что объяснили? оправдали ущербность std::string предложив юзать std::vector ? Великолепно. операции со строками понимашь ли std::string оптимизирует, угу, инетересно как? В большинстве компиляторов через массивы std::string и работает, не нужно лить тут воду про мнимую оптимизацию. Ибо я с трудом представляю ситуацию где строки не в виде массивов мне облегчат жизнь. В std::string, даже не удосужились перегрузить оператор +, зато реализовали голимый += ...
                    Сообщение отредактировано: KILLER -
                      KILLER, ты настолько привык отожествлять Cшные ASCIIZ-строки с массивом символов, что понятие типа данных "строка" у тебя неотделимо от "массив символов". Я же не вижу причин иметь в лице std::basic_string<> ещё один вектор. Как я понимаю, тебя не устраивает, что получив массив символов посредством GetCurrentDirectory(), ты не можешь сделать find_last_of('\\'), да? Ну так делов-то:
                      ExpandedWrap disabled
                        std::vector<TCHAR>::reverse_iterator i = std::find(path.rbegin(), path.rend(), _T('\\'));
                      Не так эффективно может быть, да, но это профайлером надо замерять. Не так удобно, да, ну а что вы хотели от массива символов. С другой стороны все алгоритмы так построены, итераторы и предикаты, и никто ещё не умер, пытаясь применить их к вектору, а не более сложному контейнеру. Ну подумаешь, вектор хранит символы... Это проблема? Если legacy API хочет массивы символов, то подружить его со строками всё равно не удастся. Тебе решать, один раз скопировать из массива в строку и пользовать удобные методы, индексы и длины или не копировать и пользовать алгоритмы, предикаты и итераторы. Но калечить строки из-за эфемерной выгоды от стандартизации их реализиции в виде массива символов Стандарт не будет. Хватит того, что в новом Стандарте гарантируется непрерывность стораджа, как у вектора.

                      Добавлено
                      Цитата KILLER @
                      В std::string, даже не удосужились перегрузить оператор +, зато реализовали узербный += ... Только кто им реально пользуется?
                      :D Реально, KILLER, строки тебе просто не нужны.
                      Сообщение отредактировано: Qraizer -
                        Цитата Qraizer @
                        Как я понимаю, тебя не устраивает, что получив массив символов посредством GetCurrentDirectory(), ты не можешь сделать find_last_of('\\'), да?

                        Нет. Вообще не вту степь. причем тут find_first_of/find_last_of... Я говорю о том, что хочу писать одностилевой код. Либо в стиле С++, с использованием стандартной библиотеки, либо в стиле С, используя stdlib. При этом если я работаю со строками, и мне понадобилось поюзать сишную функцию, которая принимает С-строковый буфер, куда будет писать данные, я не хочу создавать временные переменные, или временные вектора. Я хочу работать со своей переменной типа std::string, но так как он кастрированный, я могу работать только с ним, или получить от него С-строку для чтения. И все. Писать туда я не могу. Вы мне вместо этого предлагаете копировать содержимое моей строки в вектор, передавать вектор в сишную функцию, потом результат преобразования опять пихать в мою строку, с которой я работал. На кой мне это упало? Зачем такое?

                        Вторая часть поста, отталкивается от того что:
                        Цитата
                        ты не можешь сделать find_last_of('\\'), да?

                        Поэтому не вижу смысла ее коментировать.

                        Добавлено
                        Цитата Qraizer @
                        Реально, KILLER, строки тебе просто не нужны.

                        Нужны. Но я не хочу плодить туеву хучу безсмысленных строчек кода, я хочу компактный, совместимый код. Реально я ниразу не юзал += у std::string, ибо толку от него 0. Лучше ostringstream юзнуть и не парица...

                        Добавлено
                        Qraizer, вот ты все пишешь и пишешь, отталкиваясь от того, как оно есть сейчас. Ты мне поясни, в чем выгода std::string какой он есть сейчас? Я не вижу профита. Что он реально экономит доли секунды в критических ситуациях со своей оптимизированной реализацией, которая в большей части компиляторов сделана через тот же массив???
                        Сообщение отредактировано: KILLER -
                          Цитата KILLER @
                          Где объяснили? Что объяснили? оправдали ущербность std::string предложив юзать std::vector

                          Нет, сказали что использовать один тип, когда требуется другой - не по феншую.
                          Цитата KILLER @
                          В std::string, даже не удосужились перегрузить оператор +, зато реализовали голимый +=

                          Да ладно. А студия и gcc это прекрасно компилят, не догадываясь, что std::string они складывать не должны :(
                          ExpandedWrap disabled
                            std::string str1 = "35423452", str2 = "fdgsdfgs d";
                            std::string str3 = str1 + str2;

                          тынц, если не веришь.

                          Добавлено
                          И вообще, если тебе недостаточно функционала std::string, в чем проблема написать свой класс, ведущий себя так, как надо тебе? Благо, С++ это позволяет.
                            Цитата OpenGL @
                            Нет, сказали что использовать один тип, когда требуется другой - не по феншую.

                            А значит вектор - это как раз другой тип, и использовать его по феншую? :lol: Да это самый что нинаесть workaround в самом его гнусном проявлении, типа микроскопом гвоздь задолбили.

                            Цитата OpenGL @
                            Да ладно. А студия и gcc это прекрасно компилят, не догадываясь, что std::string они складывать не должны

                            да?
                            на тебе тоже тынц
                            Нет стандарта у меня щас под рукой. Но помню с этим оператором у меня были проблемы на какойто платформе.

                            Добавлено
                            Цитата OpenGL @
                            И вообще, если тебе недостаточно функционала std::string, в чем проблема написать свой класс, ведущий себя так, как надо тебе? Благо, С++ это позволяет.

                            Ой спасибо, только куда его пихать то? на мне три проекта разных из одного комплекса, а вот комоны - это отдельная тима... или мне всякий раз писать такой класс?
                            Сообщение отредактировано: KILLER -
                              Цитата KILLER @
                              Нет стандарта у меня щас под рукой.

                              Не поверишь, но в стандарте то же самое :)
                              Кстати, вопрос к Qraizer. Почему Стандарт и Плюсы ты пишешь обычно с большой буквы? :)
                              Сообщение отредактировано: OpenGL -
                                Цитата OpenGL @
                                Не поверишь, но в стандарте то же самое

                                Кидай сюда цитату, я на работе проверю на всех компилях шо у меня стоят на юнихах и на вендах, возможно я ошибся в тут.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 386 387 [388] 389 390 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5253 ]   [ 15 queries used ]   [ Generated: 30.07.26, 11:53 GMT ]