1、去掉了丑陋的宏。
C/C++中的宏是很令人厌烦的,D不允许再使用它。
2、好用的字符串常量表达式。
除了类C的使用双引号的字符串常量表达式以外,还可以使用`字符。可以使用x"68 65 6C6C 6F"来表示"hello",r"ab\na"则忽略字符串常量中转义字符的转义作用,还可以在字符串常量后加上c, w或d来指示字符串常量是char[]类型、wchar[]类型还是dchar[]类型。可以使用~运算符连接2个字符串。
3、数字。
数字可以直接使用,还可以这样来定义:int a = 3_029_301_000; 数字直接量(包括整数、浮点数、复数)表达式中,“_”字符是被忽略的。另外还直接提供了复数类型。
4、提供定长数组、变长数组、关联数组。
int[3] a定义一个定长数组;int [] a定义一个变长数组;int[int]定义一个关联数组,键类型是int,值类型是int;int[char[]] a定义一个关联数组,键类型是char[],值类型是int,使用非常方便。
可以使用foreach来遍历数组:
foreach (int index, int value; a)
printf ("%d: %d\n", index, value);
foreach (char[] key, int value; a)
printf ("%.*s: %d\n", index, value); 可以使用in操作符来判断某个值是否是关联数组的一个键:
int[char[]] a;
if ("hello" in a)
writefln ("hello"); 数组可以切片(slice):
int[] a;
int[] b = a[1..3];
int[] c = a[1..length]; 等等。。。。
5、其它还支持委托、函数指针、模板、异常、RAII、契约式编程、单元测试、with语句、auto/typeof、垃圾回收、操作符重载、内联汇编、条件编译、嵌入到HTML等,它还标准化了ABI(这是C/C++最让人头痛的地方之一)。这些特性大部分都比较熟悉和实用,下面简单介绍一下条件编译和嵌入到HTML。
6、条件编译。
在D中,可以使用version(VersionID)来进行条件编译:
version (Win32)
{
//
}
else
{
//..
} 还可以使用debug条件:
debug
{
//
}
else
{
//
} 或者:
debug printf ("hello");
静态条件编译:
const int n=1;
static if (n == 1)
writefln ("hello");
else
writefln ("world");
类型检查:
int n = 3;
if (is(n[]))
writefln ("like array");
if (is(n:int))
writefln ("is an integer");
7、嵌入HTML。
在一个HTML文件中,<code>和</code>之间的部分可以当作D代码来编译。比如下面这段代码:
<h1>This is a test</h1>
<code>
import std.c.stdio;
int <font size=+1><b>main</b></font>()
{
<span style="color:red">printf</span>(<u>"hello world\n"</u>);
return 0;
}
</code>
<hr />
<h1> End </h1>
把它存储为HTML文件,可以直接使用dmd编译器编译。