Комментарии 28
А читаю «кутЭ.»
Программирование на Qt отличается от программирования на C++. Что вы думаете о дублировании функционала — например QVector и многого другого? Планируете объединить или что?Да, отличается, в лучшую сторону. Вот яркий пример: string replace. Хочется писать код не теряя мысль, а не офигевать от того, как сложно приходится делать простые вещи. ИМХО, но именно этим современный C++ (а если быть точным, то его стандартная библиотека) и не впечатляет. Qt на порядок удобнее.
Могли бы реализовать не функциями-членами, а внешними алгоритмами — как в бусте. Вроде бы это C++ way — делать алгоритмы обобщёнными (boost string algorithms вроде работает и не только с std::basic_string). Тогда не был бы нужен QString, дублирующий стандартную строку. Это я к тому, что всё относительно. Вопрос вкуса и философии языка в какой-то мере.
C++ из-за своей ниши не может позволить себе из коробки никаких явных расходов, это понятно, но в том же Go такая же идеология (неявно, за кулисами ничего не происходит), и стандартная библиотека поудобнее будет, хоть она и в процедурном стиле. Поэтому по моему мнению не стоит распространять приемы чистого C++ на кроссплатформенный швейцарский (норвежский?) нож.
то есть любое использование подразумевает обращение по указателю, что не есть хорошо с т.з. локальности данных (data locality).
Но с другой стороны имеем implicit sharing.
QString это не только алгоритмы над строками (append, prepend, replace, trimmed, split, etc), а встроенная поддержка форматирования (arg) и преобразования из/во что угодно (числа, латиница, string, wstring, nsstring, массивы, etc).
Я бы отдельно и особо выделил: Unicode.
Хочется верить, что эта функция отсутствует не просто так, а для того что бы предостеречь программистов от неэффективного кода и направить в сторону эффективного.
Если как в том примере нужно форматированое генерирование строк, то stringstream вам в руки.
эффективную функцию replace
По вашему replace быстрее <<
?
Если рассматривать вашу фразу в контексте stringstream, то это очень медленная реализация по работе с форматированием строк. Ее можно использовать только в простых случаях. Первый загугленный пруф.
Я боюсь, что replace() сложнее реализовать более эффективно чем можно выжать из stringstream. Если stringstream со своей строкой и reserve() перед вызовом — то должна быть одна аллокация в куче и дальше только копирование выводимых фрагментов (заметьте, что в вашем же примере strinstream without construction в целом не сильно отстаёт от lexical_cast, а где-то и опережает). В случае же с replace() у вас в любом случае две аллокации в куче и вся стока копируется во время замены. Поэтому "типичная" replace() — возможно, а "эффективная" — сложно сказать.
Я предполагаю, что <<
должно работать быстрее, потому что это добавление в конец, а не удаление + вставка, в каком то месте в середине строки, которое ещё нужно найти.
Программирование на Qt отличается от программирования на C++
Qt — это не язык вообще, а библиотека к языку. Странное утверждение.
Если еще немного филосовски поразмышлять, то можно обратить внимание на тот факт, что в любом Qt-приложении есть QApplication (QCoreApplication если быть точным). Это серьезная заявка на выход из статуса библиотеки в сторону фреймворка.
P.S. И если быть совсем точным, то Qt приносит некоторые новшества в сам язык, хоть и завуалированно. Поэтому утверждение не абсурдное.
Кютэ (наверное, изучение немецкого в школе сказывается).
Все жду от них готовой 64 бит сборки на mingw.
Qt звучит как cutie (читается "кьютИ" /ˈkjuːti/), так называют симпатичную милую девушку :)
[CppCon 2017] Ларс Кнолл: C++ фреймворк Qt: История, Настоящее и Будущее