qiezi的学习园地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首页 :: 新随笔 ::  ::  :: 管理 ::
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>()
{
&nbsp;<span style="color:red">printf</span>(<u>&quot;hello world\n&quot;</u>);
&nbsp;return 0;
}
</code>
<hr />
<h1> End </h1>

把它存储为HTML文件,可以直接使用dmd编译器编译。
posted on 2005-11-02 16:35 qiezi 阅读(911) 评论(0)  编辑 收藏 引用 所属分类: 学习方向D