Re: operator= function
Kira Yamato wrote:
[..] The syntax
if (a)
{
// do something
}
is not clear what you're testing for here.
Of course not! Who in their right mind would name a variable 'a'?
But imagine that the variable is 'statusIsValid' (and its type is not
necessarily 'bool'). What prevents me from writing
if (statusIsValid)
{
// do something
}
?
Code readability should be
highly sought for.
Sure. Don't name your variables 'a' or 'b'.
Even with native data-types like integers, it's
better to write
if (n != 0) ...
than just
if (n) ...
Now, with integers it may make sense. But with a class object
I would have to define non-equality comparison to 'int' in order
for 'if (n != 0)' to compile. OTOH, if I just define operator
bool() (known as type conversion function), both 'int' _and_ my
type would work in 'if (n)' beautifully.
unless you worry about performance, at which I would think a smart
compiler would generate equivalent codes for both cases anyway.
Also, don't overload the operator bool() just to support the if-test.
You might get yourself into trouble in other situations with this
implicit conversion.
Yes, that's why some folks define 'operator void*()' instead.
My suggestion is to be explicit and have an method like
bool isValid() const;
so that your if statement reads more explicitly
if ((a=b).isValid()) ...
Ouch. I still think that even
if (a=b, a.isValid())
is better. But nothing beats
a = b;
if (a.isValid())
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask