On Friday, 18 October 2013 at 06:56:49 UTC, monarch_dodra wrote:
On Friday, 18 October 2013 at 06:13:38 UTC, DDD wrote:
I'm learning D. I'm curious about surprises I may get. I
typically use C++, C# and javascript
Off the top of my head, I think the biggest one is that D
doesn't offer "default constructors". Instead, it only has a
default value initialization.
EG:
S s;
S s = S.init;
S s = S();
S s = S(5);
The first 3 lines are more or less equivalent.
Not always actually.
This can bite you in the ass if you write something like:
struct S
{
this(int i = 5)
{}
}
S s = S(); //Does *not* call the constructor with the value 5.
One can bite in the ass even more in case of
struct S { @disable this(); } and using S.init or
void foo () { int i; struct S { int bar() { return i; } } and
also using S.init
Finally, D doesn't have "copy constructor". It has something a
bit sweeter called "postblit". Basically, you first bitcopy the
object you want to duplicate, and then, a function called
"postblit" gets called, which does the work that is required
(should any be required). What's nice about this is that the
"target object" and "source object" never actually communicate.
How much are there threads asking what is wrong with the language
when there are const/immutable structs and postblit :) ?