1、去掉了丑陋的宏。
C/C++中的宏是很令人厭煩的,D不允許再使用它。
2、好用的字符串常量表達式。
除了類C的使用雙引號的字符串常量表達式以外,還可以使用`字符??梢允褂脁"68 65 6C6C 6F"來表示"hello",r"ab\na"則忽略字符串常量中轉義字符的轉義作用,還可以在字符串常量后加上c, w或d來指示字符串常量是char[]類型、wchar[]類型還是dchar[]類型。可以使用~運算符連接2個字符串。
3、數(shù)字。
數(shù)字可以直接使用,還可以這樣來定義:int a = 3_029_301_000; 數(shù)字直接量(包括整數(shù)、浮點數(shù)、復數(shù))表達式中,“_”字符是被忽略的。另外還直接提供了復數(shù)類型。
4、提供定長數(shù)組、變長數(shù)組、關聯(lián)數(shù)組。
int[3] a定義一個定長數(shù)組;int [] a定義一個變長數(shù)組;int[int]定義一個關聯(lián)數(shù)組,鍵類型是int,值類型是int;int[char[]] a定義一個關聯(lián)數(shù)組,鍵類型是char[],值類型是int,使用非常方便。
可以使用foreach來遍歷數(shù)組:
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操作符來判斷某個值是否是關聯(lián)數(shù)組的一個鍵:
int[char[]] a;
if ("hello" in a)
writefln ("hello");數(shù)組可以切片(slice):
int[] a;
int[] b = a[1..3];
int[] c = a[1..length];等等。。。。
5、其它還支持委托、函數(shù)指針、模板、異常、RAII、契約式編程、單元測試、with語句、auto/typeof、垃圾回收、操作符重載、內(nèi)聯(lián)匯編、條件編譯、嵌入到HTML等,它還標準化了ABI(這是C/C++最讓人頭痛的地方之一)。這些特性大部分都比較熟悉和實用,下面簡單介紹一下條件編譯和嵌入到HTML。
6、條件編譯。
在D中,可以使用version(VersionID)來進行條件編譯:
version (Win32)
{
//
}
else
{
//..
} 還可以使用debug條件:
debug
{
//
}
else
{
//
} 或者:
debug printf ("hello");
靜態(tài)條件編譯:
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編譯器編譯。