Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 386 387 [388] 389 390 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5806
,
|
|
|
|
|
Сообщ.
#5807
,
|
|
|
|
Цитата D_KEY @ А если не хочется копировать и преобразовывать в unicode? А что тебе хочется ? |
|
Сообщ.
#5808
,
|
|
|
|
|
Сообщ.
#5809
,
|
|
|
|
Цитата OpenGL @ А вообще есть ли нечто подобное С++, но без совместимости с Си? В каком смысле "нечто подобное" ? Может D ? |
|
Сообщ.
#5810
,
|
|
|
|
Цитата 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 @ Та тем, что это строка, а не массив! Ты их синопсисы не сравнивал, что ли? Векторый интерфейс ориентирован на удобную работу с массивом, строковый - на удобные строковые операции. И требования в ним разные по этой причине. Строковый класс может оптимизировать свою реализацию так, что бы строковые операции были максимально эффективными, вектор - на максимальную совместимость с абстракцией "массив". Вода... необоснованое оправдание существующей функциональности, не более. В С работают с массивами, и не паряца, неужто строку в виде дерева или списка удобнее представить и работать с ней? |
|
Сообщ.
#5811
,
|
|
|
|
Цитата IL_Agent @ В каком смысле "нечто подобное" ? Может D ? Сначала хотел ответить нет, но потом подумал, что если совместимость полностью убрать, то что получится - представить сложно. Может, и D. Вобщем, это был глупый вопрос |
|
Сообщ.
#5812
,
|
|
|
|
Цитата OpenGL @ Сначала хотел ответить нет, но потом подумал, что если совместимость полностью убрать, то что получится - представить сложно. Получаца костыли типа как при работе с std::string, шаг влево, шаг вправо - пиши костыль, извращайся через вектора, делай темповые массивы на статике, в общем получается неодностилевый говняный код, в котором идет смесь кода С с С++, что со стороны выглядит ужасно. |
|
Сообщ.
#5813
,
|
|
|
|
Опять 25? Все же вроде уже объяснили. Да и как как связано то, что ты процитировал с тем, что ты написал - непонятно.
|
|
Сообщ.
#5814
,
|
|
|
|
Цитата OpenGL @ Опять 25? Все же вроде уже объяснили. Да и как как связано то, что ты процитировал с тем, что ты написал - непонятно. Где объяснили? Что объяснили? оправдали ущербность std::string предложив юзать std::vector ? Великолепно. операции со строками понимашь ли std::string оптимизирует, угу, инетересно как? В большинстве компиляторов через массивы std::string и работает, не нужно лить тут воду про мнимую оптимизацию. Ибо я с трудом представляю ситуацию где строки не в виде массивов мне облегчат жизнь. В std::string, даже не удосужились перегрузить оператор +, зато реализовали голимый += ... |
|
Сообщ.
#5815
,
|
|
|
|
KILLER, ты настолько привык отожествлять Cшные ASCIIZ-строки с массивом символов, что понятие типа данных "строка" у тебя неотделимо от "массив символов". Я же не вижу причин иметь в лице std::basic_string<> ещё один вектор. Как я понимаю, тебя не устраивает, что получив массив символов посредством GetCurrentDirectory(), ты не можешь сделать find_last_of('\\'), да? Ну так делов-то:
![]() ![]() std::vector<TCHAR>::reverse_iterator i = std::find(path.rbegin(), path.rend(), _T('\\')); Добавлено Цитата KILLER @ В std::string, даже не удосужились перегрузить оператор +, зато реализовали узербный += ... Только кто им реально пользуется? Реально, KILLER, строки тебе просто не нужны. |
|
Сообщ.
#5816
,
|
|
|
|
Цитата 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 какой он есть сейчас? Я не вижу профита. Что он реально экономит доли секунды в критических ситуациях со своей оптимизированной реализацией, которая в большей части компиляторов сделана через тот же массив??? |
|
Сообщ.
#5817
,
|
|
|
|
Цитата KILLER @ Где объяснили? Что объяснили? оправдали ущербность std::string предложив юзать std::vector Нет, сказали что использовать один тип, когда требуется другой - не по феншую. Цитата KILLER @ В std::string, даже не удосужились перегрузить оператор +, зато реализовали голимый += Да ладно. А студия и gcc это прекрасно компилят, не догадываясь, что std::string они складывать не должны ![]() ![]() ![]() std::string str1 = "35423452", str2 = "fdgsdfgs d"; std::string str3 = str1 + str2; тынц, если не веришь. Добавлено И вообще, если тебе недостаточно функционала std::string, в чем проблема написать свой класс, ведущий себя так, как надо тебе? Благо, С++ это позволяет. |
|
Сообщ.
#5818
,
|
|
|
|
Цитата OpenGL @ Нет, сказали что использовать один тип, когда требуется другой - не по феншую. А значит вектор - это как раз другой тип, и использовать его по феншую? Да это самый что нинаесть workaround в самом его гнусном проявлении, типа микроскопом гвоздь задолбили.Цитата OpenGL @ Да ладно. А студия и gcc это прекрасно компилят, не догадываясь, что std::string они складывать не должны да? на тебе тоже тынц Нет стандарта у меня щас под рукой. Но помню с этим оператором у меня были проблемы на какойто платформе. Добавлено Цитата OpenGL @ И вообще, если тебе недостаточно функционала std::string, в чем проблема написать свой класс, ведущий себя так, как надо тебе? Благо, С++ это позволяет. Ой спасибо, только куда его пихать то? на мне три проекта разных из одного комплекса, а вот комоны - это отдельная тима... или мне всякий раз писать такой класс? |
|
Сообщ.
#5819
,
|
|
|
|
Цитата KILLER @ Нет стандарта у меня щас под рукой. Не поверишь, но в стандарте то же самое ![]() Кстати, вопрос к Qraizer. Почему Стандарт и Плюсы ты пишешь обычно с большой буквы? |
|
Сообщ.
#5820
,
|
|
|
|
Цитата OpenGL @ Не поверишь, но в стандарте то же самое Кидай сюда цитату, я на работе проверю на всех компилях шо у меня стоят на юнихах и на вендах, возможно я ошибся в тут. |