1. C++ / Говнокод #12111

    +24

    1. 1
    QString("a=%1 b=%2").arg("[%1]").arg("Shit happens")

    Вы думаете, что результат будет "a=[%1] b=Shit happens"?
    Как бы не так! "a=[Shit happens] b=%2".

    Причем эта "фича" вполне документирована. Но документирована она не в самом первом описании arg'а, а только в arg(const QString &a1, const QString &a2), в доку по которому я естественно никогда не заглядывал...

    UPD: правильным вариантом будет QString("a=%1 b=%2").arg("[%1]", "Shit happens"), но тогда мы лишаемся поддержки форматирования, да и таким образом можно засунуть максимум 10 аргументов.

    Запостил: bormand, 13 Ноября 2012

    Комментарии (5) RSS

    • >Вы думаете, что результат будет "a=[%1] b=Shit happens"?
      После того как ты спросил сразу стало ясно что тпм будет.
      Ответить
    • Вполне можно догадаться и без документации. Но вполне можно и случайно проглядеть, согласен...
      Ответить
      • QString("a=%1 b=%2").arg("[%1]") - результат имеет тип QString и содержит "a=[%1] b=%2", какого же еще результата ожидать от второго вызова arg?
        Ответить

    Добавить комментарий