On Thursday, 22 August 2019 08:39:07 PDT Mutz, Marc via Development wrote: > And QLatin1String and QStringLiteral are of Trolltech's making. Go to > the internal history and go discuss with the original authors. From my > pov, they solved and still solve particular needs. Those needs don't > overlap, and they also don't overlap with simple "" or u"", so a > programmer should be able to learn when to use which one. This isn't > rocket science.
History: QLatin1String is of Trolltech's making, it's from Qt 4.0 time. But it really came about because KDE during Qt3 days had a lot of #define L1S(x) QString::fromLatin1(x) QLatin1String was required because in 3.x and 4.x QString's constructor used the *locale* codec, not a fixed codec. The locale codec is slow, since we factored out to iconv in 4.x. We don't know what it does, so we can't optimise it. It could even be one of the Asian not-exactly-ASCII compatible (where the backslash is ¥ or ₩). That meant the following did work on all Unix we developed on (not Windows), but could fail in the field: QString degree("\xc2\x80"); // U+0080 With 5.0, we switched to UTF-8 as the codec for the QString constructor, so you can write the above code and it will be what is expected. But QLatin1String is retained because on 5.0, the UTF-8 codec was much slower than the Latin1 one. The SIMD-optimised UTF-8 codec didn't come until later. QStringLiteral is a 5.0 invention, so it's not Trolltech anymore. I'm the one who created that, so it's a hybrid of Nokia / Intel :-) It was a very good solution given what we knew in 2011 and 2012 and the experience that was available with C++11 Unicode strings at the time. Now we know better and we know how to make it better. For Qt 6, it is possible (and is still my goal[*]) to make creating a QString out of a QStringView and through it from a u"" literal happen in constant time, inlined, with no memory allocation. A QStringView of such is a pair: { m_size: N, m_data: PTR } a QString created from this QStringView would be: { m_size: N, m_data: PTR, d: nullptr } [*] Unless we decide that QString always points to heap memory to avoid the plugin-unloading issue. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel System Software Products _______________________________________________ Development mailing list Development@qt-project.org https://lists.qt-project.org/listinfo/development