原文
更改编译器
禁止使用-preview=fixImmutableConv从const(void)[]复制到void[]
如果const(void)[]数据包含尾常指针,则复制到void[],随后可能会违反常数据:
void f(int*[] a, const int*[] b)
{void[] va = a;const void[] vb = b;va[] = vb[]; //用`常`指针填充*a[0] = 0; //更改常数据
}
不再允许用-preview=fixImmutableConv开关复制vb数据到va.
现在按十六进制串对待导入式
虽然导入式的类型为串,但也用它们来嵌入二进制文件.通过按十六进制串对待它们,会隐式按整型数组而不是符数组,来转换它们.
//以前,需要一个转换:
immutable ubyte[] iconImg = cast(immutable ubyte[]) import("icon.png");
//现在,隐式地按整型数组转换它:
immutable ubyte[] iconImg = import("icon.png");
除了0或1以外的极值,都不安全
(针对2.109)已更新规范,因此只有0和1是极的安全值.即读取其底层字节表示设置了其他位的极值是实现定义的,应避免它.
因此,在@安全代码中已弃用以下内容:
1,极的空初化(自2.109起)
2,从联中读取极字段(自2.109起)
3,按极动态数组类型转换运行时动态数组.
4,按尾可变动态数组类型,转换运行时极动态数组
5,按极指针类型转换指针.
6,按尾可变指针类型转换极指针.