下面是一些D語言的特性的演示代碼。
void main()
{
tryStructs();
}
void tryStructs()
{
// 和C#類似,class是引用類型,而struct是值類型
// static initialization
//----------------------------------
struct X
{
int a;
int b = 99;
}
X x; // x.a調用默認初始化,值爲0,x.b初始化爲我們指定的值--99
writefln("x.a = ", x.a, ", X.b = ", x.b);
static X x2 = {a:5, b:6}; // D的一種初始化方式
static X x3 = {5, 6}; // C風格的初始化
// dynamic initialization
//------------------------------------
struct S
{
float x;
float y;
static S opCall(float s)
{
S r;
r.x = r.y = s;
return r;
}
static S opCall(float _x, float _y)
{
S r;
r.x = _x;
r.y = _y;
return r;
}
}
S s1;
s1.x = 0;
s1.y = 1;
// struct 不支持構造函數,使用opCall可以方便書寫
S s2 = 9; // 調用opCall
writefln("s2.x = ", s2.x, ", s2.y = ", s2.y);
S s3 = (5,6); //調用opCall
s3 = S(8,9);
writefln("s3.x = ", s3.x, ", s3.y = ", s3.y);
// struct properties
//---------------------------------
writefln("sizeof = ", s3.sizeof,
", alignof = ", s3.alignof,
", tupleof = ", s3.tupleof,
", offset of x = ", S.x.offsetof,
", offset of y = ", S.y.offsetof);
// union
//------------------------------------
union U
{
int n;
float f;
}
static U u1 = {f:1.0f};
writefln("u1.f = ", u1.f,
", u1.n = ", u1.n);
}