Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 381 382 [383] 384 385 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5731
,
|
|
|
|
Показывает гибкость С++.
![]() Давай тебе вопрос. Какое отношение имеет std::string к согласованию о строках, принятому в С? |
|
Сообщ.
#5732
,
|
|
|
|
Причем тут работа с std::string, если ты хочешь работать с С-строками? Добавлено Цитата Повстанець @ Какое отношение имеет std::string к согласованию о строках, принятому в С? Кстати, KILLER, ты случаем не считаешь С++ и С один и тем же языком ? |
|
Сообщ.
#5733
,
|
|
|
|
Вот где сила
![]() ![]() function CurrentDirectory: ShortString; var Len: Byte absolute Result; begin Len := GetCurrentDirectory(SizeOf(Result), @Result[1]); end; procedure TForm1.FormCreate(Sender: TObject); begin ShowMessage(CurrentDirectory); end; |
|
Сообщ.
#5734
,
|
|
|
|
KILLER, в C нет строк. Там есть только массивы символов. Если ты пишешь C++ код для API, ориентированного на C, неважно, какого уровня, хоть Win, хоть zlib, забудь о строках. Вообще. Тебе не нужны строки, потому что все такие APIs используют массивы символов. Строка - это тип данных, к массивам символов не имеющий никакого отношения. Вот это и есть std::basic_string<>. Наличие в нём std::basic_string<>::data() и std::basic_string<>::c_str(), вообще говоря на фиг не нужно. Они там для обратной совместимости, а не для лентяев думать перед декомпозицией.
Они просто представили свои строки как аргументы WinAPI-функций, и потому решили не отсвечивать до поры. |
|
Сообщ.
#5735
,
|
|
|
|
Цитата Повстанець @ Показывает гибкость С++. Ага, ну показал ты гибкость написания костылей на С++ что ты при этом добился? Цитата Повстанець @ Давай тебе вопрос. Какое отношение имеет std::string к согласованию о строках, принятому в С? Такое, что С++ тесно связан с С, да вот только толку от этой тесной связи ноль. Цитата D_KEY @ Причем тут работа с std::string, если ты хочешь работать с С-строками? Нет, я хочу работать с std::sting строками, у меня просто есть функция принимающаяя С-строку. Цитата D_KEY @ Кстати, KILLER, ты случаем не считаешь С++ и С один и тем же языком ? Нет Цитата Qraizer @ KILLER, в C нет строк. Там есть только массивы символов. Если ты пишешь C++ код для API, ориентированного на C, неважно, какого уровня, хоть Win, хоть zlib, забудь о строках. Вообще. Причем тут С ? Я что не могу написать код основанный на массивах символов на С++ ? Господа, зачем вы пытаетесь оправдать костыли языка? Мне С++ позволит сделать такую функцию, в которую std::string я не передам. Цитата Qraizer @ Тебе не нужны строки, потому что все такие APIs используют массивы символов. Строка - это тип данных, к массивам символов не имеющий никакого отношения. Вот это и есть std::basic_string<>. Наличие в нём std::basic_string<>::data() и std::basic_string<>::c_str(), вообще говоря на фиг не нужно. Они там для обратной совместимости, а не для лентяев думать перед декомпозицией. А кто этот std::string юзает и где? В теории? Или в мелких проектах? В том же MFC, я лично ниразу не юзал std::string - ибо это поделие там нафиг не упало, зачем мне лентяю сидеть писать обертки конвертирования из std::string в С-строки и наоборот, если там у меня есть CString, который работает без проблем... Скрытый текст Щас опять какаянибудь овца будет мычать об ущербности MFC... которое тут к теме не относится |
|
Сообщ.
#5736
,
|
|
|
|
Цитата KILLER @ Можешь. Запросто. std::vector<> как раз Плюсовые массивы символов, юзай на здоровье. Костыли языка - это когда он предоставляет доступ к реализации в обход публичного интерфейса. std::basic_string<>::data() и std::basic_string<>::c_str() как раз это делают, и поэтому по-хорошему должны быть выброшены из программ, за исключением как раз случаев покостылить. KILLER, если ты жить не можешь без того, чтобы нарушить инкапсуляцию и самостоятельно завладеть стораджем объекта вместо него самого, то это не проблема языка. Я что не могу написать код основанный на массивах символов на С++ ? Господа, зачем вы пытаетесь оправдать костыли языка? |
|
Сообщ.
#5737
,
|
|
|
|
Цитата KILLER @ Мне С++ позволит сделать такую функцию, в которую std::string я не передам. ИМХО, достойно башорга |
|
Сообщ.
#5738
,
|
|
|
|
Цитата D_KEY @ Ну, UTF16 тоже много...э-э-э...символен Разве что для utf-8 или другой мультибайтовой кодировки, ибо для работы с символами переменной длины basic_string будет не эффективен. . |
|
Сообщ.
#5739
,
|
|
|
|
Цитата Qraizer @ Цитата D_KEY @ Ну, UTF16 тоже много...э-э-э...символен Разве что для utf-8 или другой мультибайтовой кодировки, ибо для работы с символами переменной длины basic_string будет не эффективен. .я думаю D_KEY имел в виду строки, где у символов нефиксированная длина (в смысле в одной строке встречаются как 8-ми-, так и 16-ти- и 32-х-битные символы) или вы о чем тут? |
|
Сообщ.
#5740
,
|
|
|
|
Цитата KILLER @ Щас опять какаянибудь овца будет мычать об ущербности MFC... которое тут к теме не относится А что, если овца промолчит, то MFC перестанет быть ущербным? Цитата KILLER @ А кто этот std::string юзает и где? В любом современном проекте на C++. Ну, например, в голову приходит MongoDB. Цитата KILLER @ В том же MFC, я лично ниразу не юзал std::string - ибо это поделие там нафиг не упало, зачем мне лентяю сидеть писать обертки конвертирования из std::string в С-строки и наоборот, если там у меня есть CString, который работает без проблем... Ну, так и не надо писать. Только из этого не следует вывод, что std::basic_string "какой-то не такой". Добавлено Цитата korvin @ я думаю D_KEY имел в виду строки, где у символов нефиксированная длина (в смысле в одной строке встречаются как 8-ми-, так и 16-ти- и 32-х-битные символы) или вы о чем тут? Все так и поняли, но в UTF16 символ может занимать 16 или 32 бита. |
|
Сообщ.
#5741
,
|
|
|
|
Цитата MyNameIsIgor @ Все так и поняли, но в UTF16 символ может занимать 16 или 32 бита. а, не знал, думал там строго 16 |
|
Сообщ.
#5742
,
|
|
|
|
Цитата Qraizer @ Можешь. Запросто. std::vector<> как раз Плюсовые массивы символов, юзай на здоровье. Костыли языка - это когда он предоставляет доступ к реализации в обход публичного интерфейса. Причем тут векторы? я имел ввиду С-строки, никуда они не делись, они в полном объеме перешли в С++, без всяких обратных совместимостей. Цитата Qraizer @ KILLER, если ты жить не можешь без того, чтобы нарушить инкапсуляцию и самостоятельно завладеть стораджем объекта вместо него самого, то это не проблема языка. Я как раз таки этого всячески стараюсь избегать. std::string - это говно поделие, которое мало где прикрутишь, а также приходица постоянно писать лишнего кода, при его использовании... Цитата OpenGL @ ИМХО, достойно башорга Конечно, речь ведь идет все о тех же С-строках. Вот тебе кусок кода: ![]() ![]() void func(char* dst, const char* src) { strcpy_safe(dst, src); //! моя функция, ее реализация неважна, работает с голыми указателями на char } На глаз скажешь это я на С++ или на чистом С написал? std::string схавает? Цитата MyNameIsIgor @ А что, если овца промолчит, то MFC перестанет быть ущербным? Во первых речь тут не об ущербности отдельно взятых технологий, во вторых ну давай, рожай в чем ущербность WinAPI и MFC в частности? В том что ты их не осилил? Цитата MyNameIsIgor @ В любом современном проекте на C++. Ну, например, в голову приходит MongoDB. Расмешил однако... Их юзают там, где они мало пересекаются с другими строками, там где идет пересечение, начинаются пляски с бубнами... Цитата MyNameIsIgor @ Ну, так и не надо писать. Только из этого не следует вывод, что std::basic_string "какой-то не такой". Он не просто не такой, он ущербен в смысле своем, причем на столько ущербен, что для того чтобы юзать его паралельно с С-строками, приходица извращатся или через временные буферы на статике или через вектора. |
|
Сообщ.
#5743
,
|
|
|
|
Цитата KILLER @ Во первых речь тут не об ущербности отдельно взятых технологий, во вторых ну давай, рожай в чем ущербность WinAPI и MFC в частности? В том что ты их не осилил? Нет В первую очередь - в их монструозности. А MFC ещё убог тем фактом, что вообще никак не соотносится с развитием плюсов - как был сделан для достандартных компиляторов, так даже и не пытается идти в ногу со временем.Цитата KILLER @ Расмешил однако... Их юзают там, где они мало пересекаются с другими строками, там где идет пересечение, начинаются пляски с бубнами... Ну, char* используется в mongo по полной, и проблем нет. А всякие WinAPI да, нафиг не упали этим ребятам ![]() Цитата KILLER @ Он не просто не такой, он ущербен в смысле своем, причем на столько ущербен, что для того чтобы юзать его паралельно с С-строками, приходица извращатся или через временные буферы на статике или через вектора. Месье может назвать строки хоть из какого ЯП, которые гораздо лучше уживаются с char* ? |
|
Сообщ.
#5744
,
|
|
|
|
Цитата KILLER @ MFC -- это просто уникальнейшее сочетание громоздкости, сложности и неочевидности с одной стороны, при низком уровне абстракции и низком уровне автоматизации по сравнению с WinAPI с другой стороны. в чем ущербность WinAPI и MFC в частности? |
|
Сообщ.
#5745
,
|
|
|
|
Цитата MyNameIsIgor @ Нет В первую очередь - в их монструозности. ОМГ, а boost, QT - это у нас компактные АПИ...хы хы,.. Цитата MyNameIsIgor @ А MFC ещё убог тем фактом, что вообще никак не соотносится с развитием плюсов - как был сделан для достандартных компиляторов, так даже и не пытается идти в ногу со временем. Да его уже давно забросили, но как это может относится к его ущербности? Цитата MyNameIsIgor @ у, char* используется в mongo по полной, и проблем нет. А всякие WinAPI да, нафиг не упали этим ребятам нафиг они юзают char*, если есть std::string ? А всякие WinApi причем тут? Цитата MyNameIsIgor @ Месье может назвать строки хоть из какого ЯП, которые гораздо лучше уживаются с char* ? Да дело не char*, std::string - он по своей сути ущербен. Чем он лучше вектора? И зачем он есть, мне лично не понятно. Добавлено Цитата Повстанець @ MFC -- это просто уникальнейшее сочетание громоздкости, сложности и неочевидности с одной стороны, при низком уровне абстракции и низком уровне автоматизации по сравнению с WinAPI с другой стороны. Можешь привести пример сложности и неочевидности ? Добавлено Господа ценители std::string, попробуйте оформить классно с помощью std::string класса, вот такой SQL запрос: ![]() ![]() std::string MakeSQL(long date_from, long date_to, const std::string& comment) { /* SELECT DISTINCT table1.code FROM table1 JOIN table2 .set = table1.primary_key WHERE table1.date between :date_from and :date_to AND table2.text like :comment */ } Мне очень интересно, как вы сейчас будете извращаться через ostring_stream класс, но хотелось бы увидеть реализацию с помощью std::string могучего класса. Даты я задаю извне, и у меня они там типа long(как вы заметили). Давайте, сделайте мне std::string буфер из комента в коде, я в вас верю... |