Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 377 378 [379] 380 381 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5671
,
|
|
|
|
Как написать такое вообще может в голову придти? |
|
Сообщ.
#5672
,
|
|
|
|
в первую очередь он пользовательский, а уж потом стандартный. И как же стандартный класс строка оставили без обратной совместимости, с char* ? Такой, что работая с std::string классом, в WIN API, а также в С либах, либо в либах, которые оперируют типами char*, приходится извращатся по разному, чтобы код, более менее был написан в одном стиле, а не юзал std::string/char*/std::vector, для работы с одними только строками... Добавлено Цитата D_KEY @ Если язык позволяет создать точно такой же пользовательский тип, то зачем его зашивать в язык Как зачем? Чтобы при работе со строками, работали со строками а не юзали кучу типов. Цитата D_KEY @ Нет, стандарт не дает тебе гарантий, что твои попытки писать в результат c_str(), изменят исходную строку(а не какой-то дополнительный буфер, например). Итог будет всегда один, неверный результат работы программы. Смысла в этой гарантии я не особо вижу.. Такой, что это класс, а класс по определению это - ???(сам догадаешься )Цитата MyNameIsIgor @ Конечно. Всем не угодишь. Я ещё раз говорю: строки в плюсах не проектировались как выходные буфера. Они проектировались как строки. И какой от них профит? И чего, никогда ошибок не делал в программах? Цитата D_KEY @ Как написать такое вообще может в голову придти? Очень просто, человек новичок, именно так и сделает, ему важно чтобы оно откомпилилось |
|
Сообщ.
#5673
,
|
|
|
|
Цитата KILLER @ И как же стандартный класс строка оставили без обратной совместимости, с char* ? basic_string не является оберткой над С-строками. Это самостоятельной средство, хотя оно и содержит несколько дополнительных средств для конструирования/равенства/чтения из/в С-строки. С-строки, как ни странно, оставлены для совместимости с С. Цитата Такой, что работая с std::string классом, в WIN API, а также в С либах, либо в либах, которые оперируют типами char*, приходится извращатся по разному, чтобы код, более менее был написан в одном стиле, а не юзал std::string/char*/std::vector, для работы с одними только строками... Ничего там не надо извращаться. Если некое C API ждет буфер - то и передавай буфер(std::vector), а не строки. |
|
Сообщ.
#5674
,
|
|
|
|
FIXED |
|
Сообщ.
#5675
,
|
|
|
|
D_KEY, да ладно еще та GetCurrentDirectory, а как быть с функциями, которые обрезают часть переданной строки ? Да и принимают всего лишь char* ? Ту уже вектор не передашь, ибо такая функция просто напросто сделает его невалидным...
|
|
Сообщ.
#5676
,
|
|
|
|
Цитата KILLER @ И какой от них профит? Такой же, как от любых других строк в любом другом языке |
|
Сообщ.
#5677
,
|
|
|
|
Цитата korvin @ Цитата (MyNameIsIgor @ Сегодня, 14:42) Цитата А в плюсах принято долго думать головой, прежде чем шагнуть ![]() FIXED Это более правильнее.. Цитата D_KEY @ basic_string не является оберткой над С-строками. Это самостоятельной средство, хотя оно и содержит несколько дополнительных средств для конструирования/равенства/чтения из/в С-строки. С-строки, как ни странно, оставлены для совместимости с С. С-строки говоришь? или указатели? Чем С-строка отличаеться от плюсового char* ? Цитата D_KEY @ Ничего там не надо извращаться. Если некое C API ждет буфер - то и передавай буфер(std::vector), а не строки. Цитата KILLER @ D_KEY, да ладно еще та GetCurrentDirectory, а как быть с функциями, которые обрезают часть переданной строки ? Да и принимают всего лишь char* ? Ту уже вектор не передашь, ибо такая функция просто напросто сделает его невалидным... |
|
Сообщ.
#5678
,
|
|
|
|
Цитата KILLER @ а как быть с функциями, которые обрезают часть переданной строки ? Пример? Цитата Да и принимают всего лишь char* ? Ту уже вектор не передашь, ибо такая функция просто напросто сделает его невалидным... Подробнее, пожалуйста Добавлено Цитата korvin @ FIXED Если так, то ты зря выбрал плюсы для этого проекта |
|
Сообщ.
#5679
,
|
|
|
|
Цитата D_KEY @ Такой же, как от любых других строк в любом другом языке ![]() Ну так в любом другом языке, не юзают массивы символов, для работы со строками(при условии что тип строка в этих ЯП присутствует) |
|
Сообщ.
#5680
,
|
|
|
|
Цитата KILLER @ С-строки говоришь? или указатели? Чем С-строка отличаеться от плюсового char* ? ![]() Чего? С-строка - это строка с нулевым символом в конце. А char * - это указатель на char Добавлено Цитата KILLER @ Цитата D_KEY @ Такой же, как от любых других строк в любом другом языке ![]() Ну так в любом другом языке, не юзают массивы символов, для работы со строками(при условии что тип строка в этих ЯП присутствует) В Haskell(и не только) юзают списки символов в качестве строк. |
|
Сообщ.
#5681
,
|
|
|
|
Цитата D_KEY @ Пример? да банальная функция trim, которая будет убирать пробелы вначале и в конце строк. Конечно ты сейчас можешь написать тут алгоритм и т.д. и т.п. но заметь это банальный пример. Цитата D_KEY @ Подробнее, пожалуйста Ну передашь ты туда указатель на первый элемент вектора, она возьмет и изменит чета, удалит там некоторые элементы. |
|
Сообщ.
#5682
,
|
|
|
|
Цитата korvin @ FIXED Тот, кто не понял банальные плюсовые trait'ы будет мне рассказывать, сколько надо думать в плюсах? |
|
Сообщ.
#5683
,
|
|
|
|
Цитата KILLER @ Цитата D_KEY @ Пример? да банальная функция trim, которая будет убирать пробелы вначале и в конце строк. Покажи. Цитата Цитата D_KEY @ Подробнее, пожалуйста Ну передашь ты туда указатель на первый элемент вектора, она возьмет и изменит чета, удалит там некоторые элементы. И что? |
|
Сообщ.
#5684
,
|
|
|
|
Цитата D_KEY @ Чего? С-строка - это строка с нулевым символом в конце. А char * - это указатель на char Того, что строка это таки массив символов с нулевым символом в конце, и эта строка ничем не отличается от char*. Цитата D_KEY @ В Haskell(и не только) юзают списки символов в качестве строк. В них есть тип строка? Добавлено Цитата D_KEY @ Покажи. Мне влом было писать свою, вот нашел в инете гдето: ![]() ![]() #define TRIM_LEFT 0 // #define TRIM_RIGHT 1 #define TRIM_BOTH 2 void trim(char* Str, int Type) { int StrLn = strlen(Str) + 1; if ((StrLn == 0) || (Type < TRIM_LEFT) || (Type > TRIM_BOTH)) { return; } char *NewStr = new char[StrLn]; int IdxSrc = -1, IdxDest = 0; if ((Type == TRIM_LEFT) || (Type == TRIM_BOTH)) { bool InText = false; while(Str[++IdxSrc]) { if (!InText && (Str[IdxSrc] != ' ') && (Str[IdxSrc] != '\n') && (Str[IdxSrc] != '\t')) { InText = true; } if (InText) { NewStr[IdxDest++] = Str[IdxSrc]; } } NewStr[IdxDest] = '\0'; } else { IdxDest = StrLn - 1; strcpy_s(NewStr, StrLn, Str); } if ((Type == TRIM_RIGHT) || (Type == TRIM_BOTH)) { while(--IdxDest > 0) { if ((NewStr[IdxDest] == ' ') || (NewStr[IdxDest] == '\n') || (NewStr[IdxDest] == '\t')) { NewStr[IdxDest] = '\0'; } else { break; } } } strcpy_s(Str, StrLn, NewStr); } Цитата D_KEY @ И что? Как и что? То что ты нарушаешь инкапсюляцию, вот что. |
|
Сообщ.
#5685
,
|
|
|
|
Цитата D_KEY @ Если так, то ты зря выбрал плюсы для этого проекта ![]() дык я и не выбираю по этой причине =) |