![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот с какого боку там int iChar, когда ucBuff типа unsigned char. во первых можно написать короче, без непонятно для чего нужного приведенния к int
во вторых в цикле мы должны быть уверены, что ни при каком значение i мы не выйдем за границу выделенной памяти для ucBuff. Это сообщение отредактировал(а) mes - 2.11.2008, 14:04 |
||||
|
|||||
| Alca |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
А чем принципиальное отличие?
и
|
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
строчка не полна, и заставляет программиста лишний раз задуматься о происходящем, хотя никакой дополнительной нагрузки вышеупомянутый код не несет. во первых если делаете преобразование , то старайтесь делать его точно. А так вы оставляете преобразование unsigned int->unsigned char на волю компилятора. во вторых точное преобразование типа static_cast всегда лучше си-каста (использованного в Вашем примере). Это сообщение отредактировал(а) mes - 2.11.2008, 14:05 |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
Спасибо.
Это сообщение отредактировал(а) Alca - 2.11.2008, 17:33 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Тему пометил решённой.
Добавлено через 28 секунд Нет, не пометил Топикстартер, помечай. |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
отчасти согласен, но смею указать, что спецификация метода c_str() приводит к тому, что эффективная реализация string в 99.99999% - это все-таки массив |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
какая спецификация можети об этом говорить? c_str() возвращает сторонний буфер который умрет при любом изменении стринга, каким образом это связано с внутренностью стринга? |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
никакая обычно (во всяком случае я не видел других вариантов) c_str() добавляет '\0' в конец строки и возвращает указатель на свой внутренний буфер - иная реализация была-бы не эффективна |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
ну как бы если мы используем С++ и std::string, то частое использование С-строк не приветствуется и говорит о кривости кода поэтому c_str() в принципе не должен использоваться часто, а значит и реализация не обязана быть эффективной -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
а я разве говорил где-то про обязательства? проясняю ситуацию в связи с тем, что: 1. c_str() быть обязана 2. организация внутреннего буфера std::string в виде нэйтив массива ничему не препятствует в плане эффективности на большинстве современных архитектур - внутренний буфер std::string организован обычно в виде массива |
|||
|
||||
| Lazin |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
я не согласен, многие интерфейсы используют const char* чтобы быть более универсальными, например, что-бы можно было написать так:
иначе пришлось бы писать так:
Добавлено через 1 минуту и 30 секунд хотя нет, можно было-бы писать foo("blablabla") в любом случае, просто в случае std::string неявно был бы вызван конструктор |
||||||
|
|||||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
J0ker,
это все понятно вопрос в чем вообще?
ты с чем-то не согласен? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
ладно, MAKCim, ты победил
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Вообще говоря, лишние конструкторы - лишнее падение производительности... ;)
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |