Top 5
Steven Schveighoffer
schveiguy at yahoo.com
Fri Oct 10 12:39:38 PDT 2008
"Andrei Alexandrescu" wrote
> Jarrett Billingsley wrote:
>> On Fri, Oct 10, 2008 at 11:54 AM, Benji Smith <dlanguage at benjismith.net>
>> wrote:
>>
>>>> new T[x] is a brain-dead syntax that I wish Walter hadn't imported in
>>>> the
>>>> first place.
>>> Really? I think it's very valuable.
>>>
>>> The "new T[x]" syntax lets you construct an array as an RValue. Without
>>> that
>>> syntax, you have to declare an array before using it.
>>
>> No, what he's getting at is that "new T[x]" does not mean "allocate a
>> statically-sized array", it means "allocate a dynamically-sized
>> array". "new T" for any T should mean "allocate a T", not "allocate
>> something that's kind of close to a T."
>>
>> What Andrei is implying, then is that for dynamic arrays, we should
>> have to use the (already-legal) "new T[](n)" form, and "new T[x]"
>> would mean to allocate a statically-sized array on the heap.
>
> Well yah but I think this will confuse people coming from C++. I just wish
> new was abolished entirely:
>
> struct S {}
> auto a = S();
> auto b = Object();
> auto c = char[](15);
> auto d = char[15]();
>
> So in general Type followed by "(" ...optional arguments... ")" yields a
> value.
to clarify (for myself mostly), you are implying:
typeof(a) == S *
typeof(b) == Object
typeof(c) == char[]
typeof(d) == char[15]*
Is that correct?
What is the syntax for allocating a struct on the stack using a constructor?
It does look more appealing. That's a really really big change though :)
Not sure anyone uses it, but what about parameters to new? I suppose you
could just write another function that does it.
-Steve
More information about the Digitalmars-d
mailing list