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