- 1
qDebug() << QString("%1-%2").arg("%1").arg("foo");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+70
qDebug() << QString("%1-%2").arg("%1").arg("foo");
LispGovno 19.04.2014 21:51 # +3
inkanus-gray 20.04.2014 18:28 # +2
Lure Of Chaos 19.04.2014 21:59 # +4
bormand 20.04.2014 08:16 # +4
3.14159265 20.04.2014 11:11 # +1
>arg("%1")
Но зачем? И вообще что за любовь постить на гк не прочитав доки к функции.
bormand 20.04.2014 11:29 # +2
Ну случайно в аргумент попал процентик ;) Мало ли чего там хочешь вставить в строку.
> не прочитав доки к функции
Да там этот момент в жопе описан. Вот все и залетают.
Но документирована она не в самом первом описании arg'а, а только в arg(const QString &a1, const QString &a2), в доку по которому я естественно никогда не заглядывал...
3.14159265 20.04.2014 13:07 # 0
Если хардкод - кодер сам виноват, если юзер-инпут, то это жопа.
Но практически любые инпуты всегда нужно валидировать/экранировать.
bormand 20.04.2014 11:32 # +3
chtulhu 20.04.2014 12:12 # +1
ССЗБ, если формируешь строку для формата из данных, полученных извне
[code]
>>> "a={a} b={b}".format(a="{q}", b="{w}").format(q=1, w=2)
'a=1 b=2'
[code]
bormand 20.04.2014 12:25 # +1
Дык эта форма очень ограниченная, управление форматом чуть менее чем никакое. Ты не можешь вывести например число с двумя цифрами после запятой и строку.
А "%1 %2".arg("aaa").arg("bbb") вызывает протечку. В этом и говно.
> если формируешь строку для формата из данных, полученных извне
Да где же? С каких пор .arg("хуйня") является частью строки формата? Не ну эта протечка задокументирована, но это один хуй неправильно.
LispGovno 20.04.2014 16:37 # 0
Почему?
chtulhu 20.04.2014 17:40 # +1
chtulhu 20.04.2014 17:47 # +1
Эх, запилить чтоли свой format на template variadic...
bormand 20.04.2014 18:11 # +1
bormand 20.04.2014 12:33 # +3
Ну а насчет ССЗБ ты прав. Эту функцию вообще нельзя юзать для случаев сложнее подстановки пачки строк или одного параметра с настройками. Вообще. Даже сраный printf и то безопасней.
P.S. Для меня эта функция в свое время была первым разочарованием в Qt ;(
roman-kashitsyn 20.04.2014 12:49 # +3
bormand 20.04.2014 12:55 # +1
В том и трабла.
> От отсутствия алтернатив и расцветает этот трэш
Да не особо оно и расцветает... Они сейчас на QML по большей части ориентируются.
LispGovno 20.04.2014 16:42 # 0
Ты так говоришь, как будто это тебя демотивирует. По моему грамотный ход. Не на HTML5 же писать под Кт. Хотя в поставке есть "HTML приложения со своим личным браузером".
LispGovno 20.04.2014 16:39 # 0
+1
printf("%s", "%s");
И это вполне грамотная ситуация без последствий.
LispGovno 20.04.2014 16:40 # 0
А какие там ещё?
bormand 20.04.2014 18:25 # +1
Тот же QThread, с которым без стакана не разберешься ... Благо потом добавили более высокоуровневых классов.
Ужасно лагающий перехват stdin/stdout через QProcess под вендой (может и пофиксили, х.з.).
Не помню точно чего не хватало, но какие-то методы от виджетов не сделали Q_INVOKABLE, из-за чего их в скрипте (QScriptEngine) не поюзаешь.
О криво прицепленных сигналах и слотах узнаешь только в рантайме (в пятой таки можно, но там были какие-то проблемы с перегрузкой слотов (что-то надо было вручную кастовать, не помню что)).
Но в целом - либа вполне годная и юзабельная. Да и альтернатив походу нет.
LispGovno 20.04.2014 20:32 # 0
А что вместо него лучше использовать? А вообще годно же. Сигналов в него заслал, он обработал и ответил. Что ещё надо?
bormand 20.04.2014 20:38 # +1
> Сигналов в него заслал, он обработал и ответил.
Ну-ну. Нук опиши, на кого ты повешаешь обработчики сигналов :)
bormand 20.04.2014 20:43 # +2
P.S. А в официальном мане эти говнюки советовали сабклассить QThread и перекрывать run() ;)
bormand 20.04.2014 20:56 # +1
Попытка вторая: находим в мане функцию moveToThread(), радостно вызываем ее после создания потомка QThread'а и... ловим баги при остановке треда.
Попытка третья: читаем статью you are doing it wrong¹, и делаем как описано комментом выше. Профит.
[1] http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/
Abbath 20.04.2014 21:03 # +1
bormand 20.04.2014 21:06 # +1
guest 20.04.2014 11:12 # 0
roman-kashitsyn 20.04.2014 11:49 # +4
kegdan 20.04.2014 16:39 # +2
Soul_re@ver 20.04.2014 17:12 # +2
roman-kashitsyn 20.04.2014 12:09 # +4
LispGovno 20.04.2014 16:46 # +1
Привет велосипедистам! Как начало сезона?
roman-kashitsyn 20.04.2014 20:27 # 0
Это ты об интеле с их TBB и Cilk? А много ли в стандартной библиотеке конкурентных контейнеров?
LispGovno 20.04.2014 20:35 # 0
roman-kashitsyn 20.04.2014 20:51 # 0
во всяком случае, tbb мне понравился (я на него ещё с год назад смотрел). Жаль, что у них профиль именно на эффективные вычисления, хотелось бы ещё и типичный сетевой concurrency видеть.
LispGovno 21.04.2014 01:02 # +1