Comments 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.
Все жду от них готовой 64 бит сборки на mingw.
Не факт, что вообще будет. Пробуйте MSYS2.
Qt звучит как cutie (читается "кьютИ" /ˈkjuːti/), так называют симпатичную милую девушку :)
Многие используют ее для программирования на чистом C++, без Qt.
Не только на C++, но и на Plain C. А я ещё и для Baremetal разработки, тыц.
[CppCon 2017] Ларс Кнолл: C++ фреймворк Qt: История, Настоящее и Будущее