20用d编程结构

结构是值类型,直接复制.可有默认值.如果未初化,则成员自动用该类型的默认值.

struct TimeOfDay {
    int hour;
    int minute;
}
//定义
    auto periodStart = TimeOfDay(8, 30);
    auto periodDuration = TimeOfDay(1, 15);
    immutable periodStart = TimeOfDay(8, 30);
    immutable periodDuration = TimeOfDay(1, 15);
//不变,动,枚,都具有自动推导的能力.
import std.math;

struct Test {
    char   c;
    int    i;
    double d;
}
//可一次初化0~3个,因为每种类型都默认初化.有默认初化值
struct Test {
    char   c = 'A';
    int    i = 11;
    double d = 0.25;
}//还可以这样,
可以这样:
    TimeOfDay periodStart = { 8, 30 };
//比c++多了一个`=`号,这是类`c`风格.
也可以这样:
    TimeOfDay t = { minute: 42, hour: 7 };
    auto yourLunchTime = TimeOfDay(12, 0);
    auto myLunchTime = yourLunchTime;
//按值复制

小心,按值复制过程中,有些成员是钥匙.复制过去的仍然是钥匙,而不是实体.如

struct Student {
    int number;
    int[] grades;//切片
}
    auto student1 = Student(1, [ 70, 90, 85 ]);
    auto student2 = student1;//复制
    student2.number = 2;//第一个是实体
    student1.grades[0] += 5;//实体在修改
    writeln(student2.grades[0]);//可见,在钥匙眼里,已经变了.要小心.
    auto student2 = Student(2, student1.grades.dup);//这样,复制了个新实体.
    student1.grades[0] += 5;
    writeln(student2.grades[0]);

静态成员可在static this()中初化,在static ~this()中析构

import std.file;

struct Point {
    enum nextIdFile = "Point_next_id_file";
    static this() {//线程开始时初化 静态
        if (exists(nextIdFile)) {
            auto file = File(nextIdFile, "r");
            file.readf(" %s", &nextId);
        }
    }
    static ~this() {
        auto file = File(nextIdFile, "w");
        file.writeln(nextId);
    }//在此析构
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值