跳转到内容

D (编程语言)/d2/类型,续

75% developed
来自维基教科书,自由的教科书

第 4 课:类型,续

[编辑 | 编辑源代码]

在本课中,您将看到所有其他类型。其中许多类型您会很熟悉,但请注意,C 和 D 在其内置类型中存在很多差异。

入门代码

[编辑 | 编辑源代码]

一体化

[编辑 | 编辑源代码]
import std.stdio;

void main()
{
    bool a; // default initialized to false
    a = 1;
    a = false;

    uint aa = 53;  //unsigned int
    ulong bb = 10395632;  //unsigned long
    short cc = 100;
    ushort dd = cc;  //dd == 100
    
    byte b = 0x5E;
    writeln(b); // prints 94
    b = 110;
    ubyte c = 255; //maximum value for a ubyte
    assert(c ==  ubyte.max);
    
    short d = 50;
    long e = d;
    writeln(e); // 50
    
    float f;  // default initialized to float.nan
    float g = 3.13;
    
    double h = g * 2.5;
    
    // largest hardware implemented floating-point
    real i = 373737373737377373.0;
    writeln(i); // 3.73737e+17
    
    // these numbers are not real:
    idouble j; //default = double.nan * 1.0i
    ifloat k;
    ireal l;
    
    cfloat m = 5 + 32.325i;  // a complex number
    
    // unsigned 8-bit UTF-8
    char n;  // default initialized to 0xFF
    n = 'm';
    writeln(n);  // m
    
    // unsigned 16-bit UTF-16
    wchar o;  // default = 0xFFFF
    
    // unsigned 32-bit UTF-32
    dchar p;  // default = 0x0000FFFF
}

使用 assert 允许您检查某个表达式是否为真。== 表示等于(不要与 = 混淆,= 用于赋值变量)。检查在运行时进行,如果括号内的任何内容计算结果为假,则会发生断言错误,并且程序将终止。

void main()
{
    bool a = true;
    assert(a);
    
    assert(2346924);  // anything that's not 0 or false
    
    // assert(false);  Assertion failure
    
    int i = 4628;
    assert(i == 4628);  // (i == 4628) evaluates to true
    assert(i != 4528);  // (i != 4528) evaluates to true
    assert(i >= 0); // yes, i is greater or equal to 0
}

属性和默认初始化器

[编辑 | 编辑源代码]

类型具有默认初始化器。这意味着,如果它们被声明但没有被分配任何值,它们默认将等于某些东西。

int i;  //i = int.init
assert(int.init == 0);  // i is definitely 0
float b = float.init;  //b = float.nan

可以从任何类型或对象查询属性。当查询类型或对象的属性时,属性名称和标识符之间有一个点。

type.property

任何类型的 init 属性包含默认情况下初始化此类型对象的 value。对于数字类型,您可以使用其各自的属性找到最小值和最大值:type.mintype.max。您还可以找到类型在内存中的大小:type.sizeof。如果您想要声明但不想初始化某些东西,您可以执行此操作

int i = void;

然后,i 未初始化;它的值是未定义的垃圾。

D 的词法语法

[编辑 | 编辑源代码]

D 允许您以几种有用的基数和形式编写数字。因此,如果您想将 A4 的十六进制数加到一百万三千一百三十七千六百三十七和 1011010101 的二进制数,您可以编写以下内容

import std.stdio;

void main()
{
    writeln(0xA4 + 1_113_637 + 0b10_11_010101);
    // hex numbers are prefixed by 0x    
    // binary numbers by 0b
    // the answer is 1114526
}

请注意,数字中间的下划线会被完全忽略。它们是 100% 可选的,并且对于格式化长数字很有用。

  • 您可以查看 此参考 以获取有关 D 的词法语法的更多信息。很快就会有一课写出有关此主题的最新信息。
华夏公益教科书