Название: Всегда ли вы используете QString? Отправлено: Alex Custov от Октябрь 30, 2011, 18:35 Всегда, даже если можно обойтись const char *:
Код
Не всегда, если можно обойтись const char *, и это безопасно: Код
Название: Re: Всегда ли вы используете QString? Отправлено: andrew.k от Октябрь 30, 2011, 19:06 Можно, только зачем?
Какие плюсы у второго куска, по сравнению с первым? Название: Re: Всегда ли вы используете QString? Отправлено: Igors от Октябрь 30, 2011, 19:44 Можно, только зачем? Если будет хороший объем текста - то очень существенныеКакие плюсы у второго куска, по сравнению с первым? Название: Re: Всегда ли вы используете QString? Отправлено: Авварон от Октябрь 30, 2011, 19:48 Код fxd Название: Re: Всегда ли вы используете QString? Отправлено: andrew.k от Октябрь 30, 2011, 20:11 Где в приведенном примере хороший объем текста?
Понятное дело, что массив чаров быстрее чем QString. Но в большинстве случаев эта разница не существенна. И что такое существенные? 32 секунды вместо 35? Название: Re: Всегда ли вы используете QString? Отправлено: ufna от Октябрь 30, 2011, 22:20 Больших сравнений текста вообще нужно избегать, таким образом по крайней мере :)
Название: Re: Всегда ли вы используете QString? Отправлено: zenden от Октябрь 30, 2011, 23:34 Экономим на спичках?
Покажите мне код, в котором QString является узкой частью. Имхо, QString - лучший класс строки, который есть для C++. Очень жаль, что его нельзя использовать не в Qt проектах. по идее, он должен быть быстрее, чем std::vector, т.к. использует механизм copy-on-write. А что вы предлагаете делать с char *?? Его даже сравнить нормально нельзя.Использовать strcmp? (кстати, в стандарте C++ даже нет функции сравнения без учета регистра!! ). Да и вообще, сырые указатели - это не модно и не безопасно. Название: Re: Всегда ли вы используете QString? Отправлено: Авварон от Октябрь 30, 2011, 23:35 Экономим на спичках? QtXml. Только и делает, что гоняет utf-8 (или другую 8битную кодировку внутри xml) в utf-16 и обратно.Покажите мне код, в котором QString является узкой частью. Название: Re: Всегда ли вы используете QString? Отправлено: andrew.k от Октябрь 30, 2011, 23:59 Больших сравнений текста вообще нужно избегать, таким образом по крайней мере :) Ну это понятно.В общем я за повсеместный QString, кроме случаев, когда это очень критично по производительности. Но тогда зачем вообще qt использовать? Меня лично бесит, когда в проекте то QString, то char *. Название: Re: Всегда ли вы используете QString? Отправлено: andrew.k от Октябрь 31, 2011, 00:02 Экономим на спичках? QtXml. Только и делает, что гоняет utf-8 (или другую 8битную кодировку внутри xml) в utf-16 и обратно.Покажите мне код, в котором QString является узкой частью. раз гоняет, значит нужно. как раз экономия на спичках. Храни данные в PlainText и читай их сишными функциями, и будет тебе очень производительно. в qt-проектах смысла нет в char *. Название: Re: Всегда ли вы используете QString? Отправлено: Авварон от Октябрь 31, 2011, 00:46 Экономим на спичках? QtXml. Только и делает, что гоняет utf-8 (или другую 8битную кодировку внутри xml) в utf-16 и обратно.Покажите мне код, в котором QString является узкой частью. раз гоняет, значит нужно. как раз экономия на спичках. Да, яхз зачем использовать char* если есть QByteArray. Название: Re: Всегда ли вы используете QString? Отправлено: andrew.k от Октябрь 31, 2011, 00:52 поверю на слово.
Но в любом случае, получается, что проблема не собственно в QString, а в том, что написано через жопу. Не QString же виноват, что QtXml его туда-сюда гоняет?) Название: Re: Всегда ли вы используете QString? Отправлено: Авварон от Октябрь 31, 2011, 01:06 andrew.k
Просто надо думать, когда пишите. В очень многих случаях можно обойтись батареем. Пример - QObject::objectName нафиг не нужен кустринг, достаточно батарея. Покажите мне извращенца, к-ый дает объектам в программе локализованные имена. Название: Re: Всегда ли вы используете QString? Отправлено: andrew.k от Октябрь 31, 2011, 01:52 Дело не в локализованности.
Можно, например, имена использовать динамически. Например, в калькуляторе PushButton0, PushButton1, PushButton2, ..., PushButton9 И выделять из имени последний символ в единственной для всех кнопок функции обработчике. Тут же QString и пригодится. И таких примеров можно массу придумать. Название: Re: Всегда ли вы используете QString? Отправлено: Авварон от Октябрь 31, 2011, 02:05 Дело не в локализованности. Можно, например, имена использовать динамически. Например, в калькуляторе PushButton0, PushButton1, PushButton2, ..., PushButton9 И выделять из имени последний символ в единственной для всех кнопок функции обработчике. Тут же QString и пригодится. И таких примеров можно массу придумать. Батарей всё это позволяет. Можно вспомнить, что значение символа - это его код - '0'. Для более сложных случаев гораздо более адекватно засовывать данные в проперти (а еще у некоторых классов есть спец userData), а не в имя. Название: Re: Всегда ли вы используете QString? Отправлено: andrew.k от Октябрь 31, 2011, 02:25 В qt3 name был как раз батареем, если мне не изменяет память, но в 4 стал уже QString.
objectName() используется частенько в qt-проектах. Поэтому совершенно логично его было проапргейдить до QString. У QPushButton я не нашел что-то UserData. Код Что может быть элегантнее? С кучей однотипных элементов иногда удобнее работать по имени, чем где-то еще данные для них хранить. Название: Re: Всегда ли вы используете QString? Отправлено: Авварон от Октябрь 31, 2011, 02:39 andrew.k
В qt3 не было нормального батарея; обжект нейм там был тупо char*, с к-оторым ничего действительно сделать нельзя. В 4ке же было повальное увлечение делать все подряд QString'ом не думая. Обжект нейм _не_предназначен_ для того, чтобы хранить данные. Обжект нейм _не_предназначен_ для перевода на другие языки. Следовательно QString здесь излишен. Элегантнее может быть только код, который сторонний человек может понять, а не гадать, какого хрена вы выцепляете из имени объекта последний символ, и чем этот символ так значим. Метод через проперти ему удовлетворяет. Еще _специально_ для таких вещей есть сигнал мапппер. А в 1й функции вам еще придется следить за тем, чтобы _другие_ кнопки не подпадали под регэксп. Удачной отладки через годик. Ну и напоследок - метод sender() Цитировать Warning: This function violates the object-oriented principle of modularity. Название: Re: Всегда ли вы используете QString? Отправлено: andrew.k от Октябрь 31, 2011, 03:11 В неэлегантности убедил.
По сабжу не убедил. Ну и напоследок - метод sender() Порадовал)Цитировать Warning: This function violates the object-oriented principle of modularity. Название: Re: Всегда ли вы используете QString? Отправлено: Igors от Октябрь 31, 2011, 10:28 Экономим на спичках? Задач в которых эти спички измеряются порядками не так уж мало. Напр при разборе текстовика хотя бы метров 10 разница уже будет видна невооруженным глазом.по идее, он должен быть быстрее, чем std::vector, т.к. использует механизм copy-on-write. std::string использует copy-on-write. QString использует implicit sharing. Это не одно и то же.Да и вообще, сырые указатели - это не модно и не безопасно. Конечно QString безумно удобен, но за это приходится платить. Мое мнение: если человек не умеет работать с char * значит он не знает языка, сколько бы чужих классов он не выучил :)Название: Re: Всегда ли вы используете QString? Отправлено: Sancho_s_rancho от Октябрь 31, 2011, 11:25 по идее, он должен быть быстрее, чем std::vector, т.к. использует механизм copy-on-write. std::string использует copy-on-write. QString использует implicit sharing. Это не одно и то же.Название: Re: Всегда ли вы используете QString? Отправлено: andrew.k от Октябрь 31, 2011, 17:05 Да и вообще, сырые указатели - это не модно и не безопасно. Конечно QString безумно удобен, но за это приходится платить. Мое мнение: если человек не умеет работать с char * значит он не знает языка, сколько бы чужих классов он не выучил :) |