- 1
qDebug() << QString("%1-%2").arg("%1").arg("foo");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+70
qDebug() << QString("%1-%2").arg("%1").arg("foo");
>arg("%1")
Но зачем? И вообще что за любовь постить на гк не прочитав доки к функции.
Ну случайно в аргумент попал процентик ;) Мало ли чего там хочешь вставить в строку.
> не прочитав доки к функции
Да там этот момент в жопе описан. Вот все и залетают.
Но документирована она не в самом первом описании arg'а, а только в arg(const QString &a1, const QString &a2), в доку по которому я естественно никогда не заглядывал...
Если хардкод - кодер сам виноват, если юзер-инпут, то это жопа.
Но практически любые инпуты всегда нужно валидировать/экранировать.
ССЗБ, если формируешь строку для формата из данных, полученных извне
[code]
>>> "a={a} b={b}".format(a="{q}", b="{w}").format(q=1, w=2)
'a=1 b=2'
[code]
Дык эта форма очень ограниченная, управление форматом чуть менее чем никакое. Ты не можешь вывести например число с двумя цифрами после запятой и строку.
А "%1 %2".arg("aaa").arg("bbb") вызывает протечку. В этом и говно.
> если формируешь строку для формата из данных, полученных извне
Да где же? С каких пор .arg("хуйня") является частью строки формата? Не ну эта протечка задокументирована, но это один хуй неправильно.
Почему?
Эх, запилить чтоли свой format на template variadic...
Ну а насчет ССЗБ ты прав. Эту функцию вообще нельзя юзать для случаев сложнее подстановки пачки строк или одного параметра с настройками. Вообще. Даже сраный printf и то безопасней.
P.S. Для меня эта функция в свое время была первым разочарованием в Qt ;(
В том и трабла.
> От отсутствия алтернатив и расцветает этот трэш
Да не особо оно и расцветает... Они сейчас на QML по большей части ориентируются.
Ты так говоришь, как будто это тебя демотивирует. По моему грамотный ход. Не на HTML5 же писать под Кт. Хотя в поставке есть "HTML приложения со своим личным браузером".
+1
printf("%s", "%s");
И это вполне грамотная ситуация без последствий.
А какие там ещё?
Тот же QThread, с которым без стакана не разберешься ... Благо потом добавили более высокоуровневых классов.
Ужасно лагающий перехват stdin/stdout через QProcess под вендой (может и пофиксили, х.з.).
Не помню точно чего не хватало, но какие-то методы от виджетов не сделали Q_INVOKABLE, из-за чего их в скрипте (QScriptEngine) не поюзаешь.
О криво прицепленных сигналах и слотах узнаешь только в рантайме (в пятой таки можно, но там были какие-то проблемы с перегрузкой слотов (что-то надо было вручную кастовать, не помню что)).
Но в целом - либа вполне годная и юзабельная. Да и альтернатив походу нет.
А что вместо него лучше использовать? А вообще годно же. Сигналов в него заслал, он обработал и ответил. Что ещё надо?
> Сигналов в него заслал, он обработал и ответил.
Ну-ну. Нук опиши, на кого ты повешаешь обработчики сигналов :)
P.S. А в официальном мане эти говнюки советовали сабклассить QThread и перекрывать run() ;)
Попытка вторая: находим в мане функцию moveToThread(), радостно вызываем ее после создания потомка QThread'а и... ловим баги при остановке треда.
Попытка третья: читаем статью you are doing it wrong¹, и делаем как описано комментом выше. Профит.
[1] http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/
Привет велосипедистам! Как начало сезона?
Это ты об интеле с их TBB и Cilk? А много ли в стандартной библиотеке конкурентных контейнеров?
во всяком случае, tbb мне понравился (я на него ещё с год назад смотрел). Жаль, что у них профиль именно на эффективные вычисления, хотелось бы ещё и типичный сетевой concurrency видеть.