[Development] Use of Standard Library containers in Qt source code

Sergio Martins iamsergio at gmail.com
Sat Jul 2 14:11:32 CEST 2016

On Friday, 1 July 2016 11:36:56 WEST Thiago Macieira wrote:
> Premises not under discussion:
> 	Qt source code is product and meant to be read by our users
> 	Qt source code must be clean and readable
> The above is not up for debate.
> For some time now, we've had a flurry of changes to Qt source code that uses
> the Standard Library's containers and algorithms, in the name of
> performance and often code size gains.

and in some cases better readability too. For example, whenever you use 
cbegin, cfind, push_back you're writing code that's not only understandable by 
Qt developers but also C++ developers.

Lowering the bar for C++ developers to start contributing is important.
I agree that STL also has many examples of worse readability, like very 
verbose algorithms. We should tackle this on a case by case basis.

> I'm not disputing that there is a gain. But I am wondering about the
> trade-off we're making with regards to readability. For example, I was just
> reviewing this code:
>     if (d->currentReadChannel >= d->readHeaders.size()
>         || d->readHeaders[d->currentReadChannel].empty()) {
>         Q_ASSERT(d->buffer.isEmpty());

"empty" is evil, I've fixed many places where the developer meant "clear()":


I think we should even remove QList::empty() in Qt6, we want STL compat with 
the good things, not the bad things.

> What do we do?

What do we do to fix what ? First state the problem.
You made a case against "empty" and then extrapolated to STL, as if you had a 
3rd premise "STL is always less readable".

> 	empty		->	isEmpty

Agreed, it's error prone.

> 	push_back	->	append
> 	front		-> 	first
> 	pop_front	->	takeFirst
> 	cbegin		->	constBegin
> 	cfind		->	constFind

Disagreed, the later form is the common denominator between C++ and Qt 

Sérgio Martins

More information about the Development mailing list