
on Sun Dec 16 2012, Yakov Galka <ybungalobill-AT-gmail.com> wrote:
On Sun, Dec 16, 2012 at 12:48 AM, Dave Abrahams <dave@boostpro.com> wrote:
on Wed Dec 12 2012, Gottlob Frege <gottlobfrege-AT-gmail.com> 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)
OK
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 invalid.
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 http://www.boostpro.com Clang/LLVM/EDG Compilers C++ Boost