Boost logo

Boost :

Subject: Re: [boost] Heads up - string_ref landing
From: Dave Abrahams (dave_at_[hidden])
Date: 2012-12-16 15:09:37

on Sun Dec 16 2012, Yakov Galka <> wrote:

> On Sun, Dec 16, 2012 at 12:48 AM, Dave Abrahams <dave_at_[hidden]> wrote:
>> on Wed Dec 12 2012, Gottlob Frege <> wrote:
>> [...]
>> >
>> > Qt's QString has both empty() and isNull() and they are not always the
>> > same. Basically empty() is a zero-byte string, but null is a
>> > never-been-set-or-allocated string.
>> That's dumb, though.
> It is the matter of value semantics vs. pointer semantics. QString is "more
> like" a pointer to a referenced counted string.

But that's a dumb thing for QString to be ;-)

>> > ie
>> >
>> > QString name = database.get("Name");
>> >
>> > name.empty() == true means the Name field was empty name.isNull()
>> > == true means the Name field doesn't exist in the database.
>> >
>> > Somewhat like optional<string>.
>> >
>> > I am NOT saying whether this is a good thing. Just a widely known
>> > example of interpretation.
>> I AM saying it's a bad thing! :-)
> I agree with you that the null state of QString is a bad thing. But this by
> itself does not justify interpreting an empty() string to be false. Let me
> explain.
> The conversion to bool usually tests the validity of the object

Now hold on a minute! I don't buy this premise. In what sense is a
null pointer or a zero integer "invalid?"

> so one can do some other operations on it. For instance this is what
> it means in iostreams (stream is in non-fail state so one can continue
> reading & writing to it)


> and pointers (not null so one can dereference it).

It tests for a useful singular state.

But if you want to follow this line of reasoning...

  front(), back(), and operator[] (probably among others)

can't be used on an empty string.

> These examples are of well understood validness of states. On the
> other hand, for strings, it is dubious that empty() strings are in any
> way invalid.

Just as it's dubious that a null pointer or a zero integer is in any way

> All operations still can be done on them, like concatenation, find,
> operator [] with index <= size(), etc...

See above.

> Having said that, personally I do not object to empty() being
> interpreted as false. I am only trying to judge this suggestion
> objectively.

Dave Abrahams
BoostPro Computing                  Software Development        Training             Clang/LLVM/EDG Compilers  C++  Boost

Boost list run by bdawes at, gregod at, cpdaniel at, john at