Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 378 379 [380] 381 382 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5686
,
|
|
|
|
char* сам по себе не обязан иметь нулевой символ в конце. Цитата В них есть тип строка? У них есть тип список и тип символ. Зачем им строка? Цитата Мне влом было писать свою, вот нашел в инете гдето: Будет работать для вектора. Цитата Ничего ты не нарушаешь. Добавлено Молодец |
|
Сообщ.
#5687
,
|
|
|
|
Цитата MyNameIsIgor @ Тот, кто не понял банальные плюсовые trait'ы будет мне рассказывать, сколько надо думать в плюсах? ![]() да, и это показатель, видишь, даже для понимания такой банальщины приходится делать усилия. но с чего ты взял, что я не понял их? хотя я не берусь утверждать, что понял их до конца, в плюсовом обобщенном коде запутаться -- раз плюнуть. =) |
|
Сообщ.
#5688
,
|
|
|
|
Цитата korvin @ да, и это показатель, видишь, даже для понимания такой банальщины приходится делать усилия Смотря кому ![]() Цитата korvin @ хотя я не берусь утверждать, что понял их до конца, в плюсовом обобщенном коде запутаться -- раз плюнуть. =) Смотря какой это код |
|
Сообщ.
#5689
,
|
|
|
|
Цитата D_KEY @ char* сам по себе не обязан иметь нулевой символ в конце. А в С - обязан иметь нулевой символ в конце? нет? Тогда про какую совместимость ты говоришь? Цитата D_KEY @ У них есть тип список и тип символ. Зачем им строка? затем что я написал: Цитата KILLER @ Ну так в любом другом языке, не юзают массивы символов, для работы со строками(при условии что тип строка в этих ЯП присутствует) Цитата D_KEY @ Будет работать для вектора. Ты в этом уверен на 100% ? Гарантию дашь? Цитата D_KEY @ Ничего ты не нарушаешь. Нарушаешь нарушаешь. Внутренний буфер вектора, она как бы внутренний буфер вектора, а не твой буфер, что мне мешает написать вот так? ![]() ![]() delete &vec[0]; ? Я ведь ничего не нарушаю? Верно? |
|
Сообщ.
#5690
,
|
|
|
|
KILLER, когда я читаю ваши посты, я начинаю сомневаться, что вы пишите на плюсах...
|
|
Сообщ.
#5691
,
|
|
|
|
Цитата KILLER @ Цитата D_KEY @ char* сам по себе не обязан иметь нулевой символ в конце. А в С - обязан иметь нулевой символ в конце? нет? Тогда про какую совместимость ты говоришь? Не обязан. Я с трудом понимаю, о чем ты сейчас Цитата Ты в этом уверен на 100% ? Гарантию дашь? Стандарт дает. Цитата Цитата D_KEY @ Ничего ты не нарушаешь. Нарушаешь нарушаешь. Нет, не нарушаешь Цитата ![]() ![]() delete &vec[0]; ? Я ведь ничего не нарушаю? Верно? А вот тут нарушаешь |
|
Сообщ.
#5692
,
|
|
|
|
Цитата D_KEY @ Не обязан. Я с трудом понимаю, о чем ты сейчас Ну ты говоришь что С-строки в С++ остались для совместимости с С-строками в С, при этом в С++ ввели спец класс для работы со строками std::string. Вот я и не могу понять, какая нафиг совместимость с С-строками - если это только условно строки. Цитата D_KEY @ Стандарт дает. Покажи место, где стандарт это гарантирует. Заодно попробуй откомпилить и запустить это с векторами. Цитата D_KEY @ Нет, не нарушаешь Цитата D_KEY @ А вот тут нарушаешь ![]() ВНЕЗАПНО! Как же нарушаю? Если ты сам сказал что не нарушаю? Добавлено Цитата MyNameIsIgor @ KILLER, когда я читаю ваши посты, я начинаю сомневаться, что вы пишите на плюсах... А вы не читайте мои посты, если вам легче станет от этого. Добавлено D_KEY, я так понимаю работать с векторами ты примерно так будешь? ![]() ![]() std::string str = " KILLER "; std::vector<char> vec(str.begin(), str.end()); trim(&vec[0], TRIM_BOTH); std::string outStr(vec.begin(), vec.end()); ? |
|
Сообщ.
#5693
,
|
|
|
|
Цитата KILLER @ Ну ты говоришь что С-строки в С++ остались для совместимости с С-строками в С, при этом в С++ ввели спец класс для работы со строками std::string. Вот я и не могу понять, какая нафиг совместимость с С-строками - если это только условно строки. Строковые литералы, например. Хотя видимо лучше проехать эту тему, я тут не пойму в чем мы не согласны. Цитата Покажи место, где стандарт это гарантирует. Цитата 23.2.4/1 The elements of a vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size(). Цитата ВНЕЗАПНО! Как же нарушаю? Если ты сам сказал что не нарушаю? ВНЕЗАПНО, ты еще можешь сделать delete даже константному указателю |
|
Сообщ.
#5694
,
|
|
|
|
Цитата D_KEY @ The elements of a vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size(). Ну так погоди, где там гарантии того, что при изменении внутреннего буфера вектора, не через метод вектора, вектор будет аналогично изменять свой size ? Функции бывают разные, есть которы усекают длину и убирают символы, некоторые вообще пихают какието данные в переданный буфер, какие гарантии, что при всех возможных удачных реализациях, передавая вектор в качестве под опытной С-строки, я не отгребу какую нибудь ошибку или еще чего то непредусмотренного мною? Цитата D_KEY @ ВНЕЗАПНО, ты еще можешь сделать delete даже константному указателю ![]() Почему внезапно? я тебе намекаю на то, что ты отдаешь внутренний буфер вектора, некой функции, которая с ним может сделать все что угодно... |
|
Сообщ.
#5695
,
|
|
|
|
Цитата KILLER @ D_KEY, я так понимаю работать с векторами ты примерно так будешь? ![]() ![]() std::string str = " KILLER "; std::vector<char> vec(str.begin(), str.end()); trim(&vec[0], TRIM_BOTH); std::string outStr(vec.begin(), vec.end()); ? Можно и так, только ![]() ![]() std::string outStr(&vec[0]); Добавлено Цитата KILLER @ Ну так погоди, где там гарантии того, что при изменении внутреннего буфера вектора, не через метод вектора, вектор будет аналогично изменять свой size ? Причем тут size() и его изменение ?Цитата есть которы усекают длину и убирают символы Ты не можешь усечь длину у буфера, который тебе передали. Цитата я тебе намекаю на то, что ты отдаешь внутренний буфер вектора, некой функции, которая с ним может сделать все что угодно... Она с ним может сделать ровно тоже самое, что сможет сделать с обычным массивом. Не больше и не меньше. |
|
Сообщ.
#5696
,
|
|
|
|
Цитата D_KEY @ Можно и так, только только там уже ошибка, так как вот это: ![]() ![]() std::string str = " KILLER "; std::vector<char> vec(str.begin(), str.end()); Не скопирует '\0' символ в вектор, его туда вручную нужно будет передавать. забыли отгребли, провозюкались N времени. Очень удобно. Цитата D_KEY @ Причем тут size() и его изменение ?При том, что функция левая, и ты понятия не имеешь что там в ней происходит... Малоли... Цитата D_KEY @ Ты не можешь усечь длину у бефера, который тебе передали. в случае с С-строками, могу, всего то передвинуть '\0' Цитата D_KEY @ Она с ним может сделать ровно тоже самое, что сможет сделать с обычным массивом. Не больше и не меньше. Это понятно. Но нужно учитывать некоторые ньюансы, которые можно легко упустить из виду. |
|
Сообщ.
#5697
,
|
|
|
|
Цитата KILLER @ только там уже ошибка Ну так зачем ты так написал Цитата Цитата D_KEY @ Ты не можешь усечь длину у бефера, который тебе передали. в случае с С-строками, могу, всего то передвинуть '\0' Ты точно так же можешь передвинуть '\0' в буфере на основе вектора. Ребят, о чем этот парень? Цитата Но нужно учитывать некоторые ньюансы, которые можно легко упустить из виду. При разработке на С и С++ это всегда нужно делать Добавлено KILLER, факт в том, что если тебе нужно взаимодействие с низкоуровневым С-API, то ты можешь передавать вектор. Как для чтения, так и для записи. О чем ты споришь? |
|
Сообщ.
#5698
,
|
|
|
|
Цитата D_KEY @ Ну так зачем ты так написал Что бы спросить у тебя правильно ли я написал. ты сказал да, код прошел ревью. Ошибка на стороне клиента, профит. Цитата D_KEY @ Ты точно так же можешь передвинуть '\0' в буфере на основе вектора. Проблема не в этом, проблема в том, что вектор так и просится чтобы его рассматривали именно как массив данных, а не строки. Понимаешь к чему я клоню? Цитата D_KEY @ Цитата Но нужно учитывать некоторые ньюансы, которые можно легко упустить из виду. При разработке на С и С++ это всегда нужно делать ![]() Ничего не напоминает? Добавлено Цитата D_KEY @ Ребят, о чем этот парень? О том, что со строками в С++ плохо, очень плохо. Цитата D_KEY @ KILLER, факт в том, что если тебе нужно взаимодействие с низкоуровневым С-API, то ты можешь передавать вектор. Как для чтения, так и для записи. О чем ты споришь? О том, что вектор - это не строка, это набор данных, и работать с ним будут как с набором данных, а не со строкой. И очень много ньюансов можно упустить из виду. |
|
Сообщ.
#5699
,
|
|
|
|
Цитата KILLER @ Ничего не напоминает? Не используйте плюсы. Вас кто-то заставляет? Или вы ничего другого не знаете? Добавлено Цитата D_KEY @ Ребят, о чем этот парень? Он хочет, чтобы плюсовые строки могли быть буферами в сишном API. Я не только не представляю как это сделать... я просто чушью считаю |
|
Сообщ.
#5700
,
|
|
|
|
Цитата MyNameIsIgor @ Не используйте плюсы. Вас кто-то заставляет? Или вы ничего другого не знаете? ![]() Мы тут рассматриваем недостатки ЯП, или обсуждаем что мне стоит использовать, а что не стоит? |