Am 26.12.2010 23:04, schrieb Jonathan M Davis:
On Sunday 26 December 2010 07:08:22 Andrei Alexandrescu wrote:
On 12/26/10 8:54 AM, spir wrote:
On Sun, 26 Dec 2010 14:54:12 +0100
Andrej Mitrovic<[email protected]> wrote:
int i; // auto-initialized to int.init
int i = void; // not initialized
Thanks. Actually this solves my "semantic" issue, did not even think at
'void'. (I will use it often). By the way, I don't want to play the
superhero with uninitialised values, simply sometimes the initial value
cannot be known at declare place.
int i;
if (foo)
i=0;
else if (bar)
i=1;
else
i=2;
playWith(i);
Problem with = void for elaborate types is that you need to use
emplace(&var, expr) to initialize them later.
And of course the _big_ problem with = void is that you're dealing with garbage
if you don't actually initialize the variable before you use it.
No, actually that's the *good* thing about = void. That initializing
variables is default and you have this special syntax that may be used
if you don't want initialization to happen.
I really like how D does this: Make the safe thing default and the
unsafe thing possible via more typing.
It's a good
addition for performance-critical code, but in general, it's a _bad_ idea to
use. It solves a major problem which exists in C and C++ with regards to
undefined and undeterministic behavior. I'd get very worried if I started seeing
code that used it all over the place.
Yes, definitely. It's good for optimization and should be only used
there, so the places where it's used instantly catch your eye.
There are straightforward cases where it's
obvious that it's of benefit and obvious that the variable in question is being
initialized, but beyond that, it really shouldn't be used.
- Jonathan M Davis