![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
Как правильно определять, что строка пустая - (str == "") или (GetLength() == 0) ?
|
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 2 Всего: 26 |
lv151, а str это что?
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Добавлено через 1 минуту и 29 секунд lv151 если речь идет об std::string |
|||
|
||||
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
CString
IsEmpty() - тоже есть. Это сообщение отредактировал(а) lv151 - 13.4.2009, 12:07 |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
lv151, Пометь решенным!
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| inside_pointer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
inside_pointer
лишь бы что нибудь написать? вы предыдущие посты прочли? это CString, класс МФЦ, причем вопрос давно решен |
|||
|
||||
| inside_pointer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
azesmcar, а что неправильного ? у неё указателя нет, или он указывает не на первый символ ?
Это сообщение отредактировал(а) inside_pointer - 15.4.2009, 10:55 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
*str - это ведь не внутренний указатель. Это char* (по всей видимости). И даже если есть, почему правильнее проверять внутренний указатель чем собственно функцией empty, которая кстати говоря с большой долей вероятности инлайн и существует как раз для этой проверки.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
одно то что первый символ находится по индексу 1, а не 0 уже должен предостеречь о таких действий. а вобще надо стараться не использовать знания о внутренней структуре объекта, и использовать методы предоставляеммые классом. |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
|
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
не работает. т.к. operator== string'a не предназначен для сравнения с char
|
||||
|
|||||
| inside_pointer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
у Страуструпа в электронной книжке нашёл такое описание, тогда конечно не прокатит, так как указатель у такой строки будет на структуру и, если даже всё таки он первый символ строки выдаст, это будет сопадением (ну типа char *p идёт первым в структуре) хотя, нашёл ещё такое: если указатель на структуру приводится к типу указателя на её первый элемент, результат указывает на её первый элемент |
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
естественно и логично, также как и для сравнения char* и char. но это совсем не то, о чем вел речь inside_pointer. Он предлогал использовать разъименование, и не работать будет по причине отсутвия у std::string operatora * (Про АнсиСтринг сказать не могу.)
Добавлено через 3 минуты и 35 секунд
1. И где здесь приведение к типу указателя на его первый элемент ? 2. и с какой стати нужное Вам, должно оказаться первым элементом ?! |
||||||
|
|||||||
| inside_pointer |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
всё
|
||||
|
|||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
inside_pointer,
вылетает при запуске на визуал студии Добавлено через 5 минут и 55 секунд inside_pointer в GCC std::string хранит только указатель на char, потому там сработает..только вот стандарт этого не гарантирует.
по вашему это красивее и правильнее чем
? |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| inside_pointer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
ну я там писал, что если совпадёт, то можно а если не совпадёт, то тоже можно Добавлено @ 12:03 mes, ну, это прямой доступ к указателю на первый символ, а не посредством компилятора (типа, как он там решит) Это сообщение отредактировал(а) inside_pointer - 15.4.2009, 12:07 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| inside_pointer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
ну, empty тоже запоминать тогда надо, в итоге разрастётся всё это как Visual Basic - триста операторов, все по-мелочи
|
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а если допустить, что класс может быть описан примерно так
? не говоря уже о строках с COW..там буффер получается "запрятан еще дальше". А также совсем не обязательно чтоб буффер был представлен как char *. Добавлено @ 12:16 если память плохая, можно заглянуть в документацию. Добавлено через 3 минуты и 28 секунд
от запомнить ничего не разростется. Добавлено через 5 минут и 42 секунды вобще-то доступ через интерфейс, определяет не компилятор, а программист/ы, написавший этот компонент. а компилятор лишь следит (в силу своих возможностей) за установленными договоренностями . Это сообщение отредактировал(а) mes - 15.4.2009, 12:16 |
||||||
|
|||||||
| inside_pointer |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
какой компонент, компонент компилятора ?
это как, а в чём смысл иного представления ? char - минимальный размер, чем меньше размер, тем меньше требований к выравниванию |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
класс, функция или библиотека. В нашем случае класс string. вот почуствуйте разницу между возможной реализцией внутренней функции и того что Вы предлагали :
как видете, Ваш способ имеет вероятность обращения по нулевому указателю. а может она хранит внутри себя как юникод ? Это сообщение отредактировал(а) mes - 15.4.2009, 12:49 |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Почитайте главу "Ослабленная монолитность std::string" в книге Саттера "Решение более сложных задач на С++". Там он говорит о том что многие функции класса std::string могли бы быть глобальными, например тот же empty
это можно применять с любым STL совместимым контейнером. И это приемлемый способ (и даже лучше чем тот что есть сейчас)..но ваш я приемлемым никак не могу назвать Это сообщение отредактировал(а) azesmcar - 15.4.2009, 12:55 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
но это тоже не избавит от запоминания функции empty |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Склероз лечится
Это сообщение отредактировал(а) azesmcar - 15.4.2009, 13:21 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
это можно применять с чем угодно. и если передадим не контейнер, то получим шквал ругательств от компилятора.
а вообще да, способ хороший. мне нравится |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
под словом применение я понимаю "использовать так чтобы работало" |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |