[Development] HEADS-UP: QStringLiteral

Philippe philwave at gmail.com
Tue Aug 20 12:41:45 CEST 2019


another Drawback : it causes a global mutex to be executed on first use
inside a block scope (c++11 static variable thread safety).

Philippe

On Tue, 20 Aug 2019 12:04:12 +0200
"Mutz, Marc via Development" <development at qt-project.org> wrote:

> Hi,
> 
> In light of a recent attempt to re-introduce QStringLiteral, relacing 
> QLatin1String, I'd like to remind everyone that QStringLiteral has a lot 
> of drawbacks and should not be used unless it saves a memory allocation.
> 
> Drawbacks include:
> 
> - doubled storage requirements (2 bytes/char) over a L1/US-ASCII string
> - unsharability with C strings (each QStringLiteral contains a new 
> lambda, lambdas have unique types, static data in token-for-token 
> identical lambdas is duplicated, merging these violates the standard)
> - introduction of QString dtor calls (cannot be optimized away)
> 
> Anti-patterns include: Using QStringLiteral in
> 
> - comparisons (includes relational operators, indexOf, contains)
> - composition (QStringBuilder, append, prepend, arg() (now partly 
> available on QStringView and QLatin1String, too)
> - lookup and, I believe, even insertion, in JSON and soon CBOR classes
> - debug statements (we prefer debug code to be compact, not fast)
> - arguments to any other function overloaded QStringView or 
> QLatin1String
> 
> Alternatives to QStringLiteral:
> 
> - u"..." (? QStringView)
> - QLatin1String
> 
> Please take note of the following recent developments:
> 
> - arg(string, ...., string) ("multiArg") is available now on QL1S and 
> QStringView
>    - number formatting isn't, yet
> - You can use u"..." in Qt sources unconditionally
>    - converts implicitly to QStringView
> - To convert QString ? QStringView, prefer qToStringViewIgnoringNull() 
> when you don't need to distinguish between the null and the empty state. 
> It saves a branch.
> 
> Please help spreading this knowledge in review and your own work.
> 
> Thanks,
> Marc
> 
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> https://lists.qt-project.org/listinfo/development




More information about the Development mailing list