分享
 
 
 

D语言中的特征(Attributes)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

特征特征指示器:

特征 :

特征 声明定义块

编译器指令 ;

其他特征指示器:

其他特征:

其他特征 声明定义块

其他特征 声明定义块 else 声明定义块

特征:

链接特征

对齐特征

编译器指令

deprecated

private

package

protected

public

export

static

final

override

abstract

const

auto

其他特征:

调试特征

版本特征

声明定义块

声明定义

{ }

{ 声明定义 }

AttributeSpecifier:

Attribute :

Attribute DeclDefBlock

Pragma ;

AttributeElseSpecifier:

AttributeElse :

AttributeElse DeclDefBlock

AttributeElse DeclDefBlock else DeclDefBlock

Attribute:

LinkageAttribute

AlignAttribute

Pragma

deprecated

private

package

protected

public

export

static

final

override

abstract

const

auto

AttributeElse:

DebugAttribute

VersionAttribute

DeclDefBlock

DeclDef

{ }

{ DeclDefs }

特征用来修饰所声明的一个或多个方法。通常的形式是: attribute declaration;// 影响这个声明

attribute:// 影响直到下一个‘}’的所有声明

declaration;

declaration;

...

attribute// 影响语句块中所有的声明

{

declaration;

declaration;

...

}

对于出现在可选的 else 子句中的声明: attribute

declaration;

else

declaration;

attribute// 影响语句块中所有的声明

{

declaration;

declaration;

...

}

else

{

declaration;

declaration;

...

}

链接特征链接特征:

extern

extern ( 链接类型 )

链接类型:

C

D

Windows

Pascal

LinkageAttribute:

extern

extern ( LinkageType )

LinkageType:

C

D

Windows

Pascal

D 提供了一种方便的调用 C 函数和操作系统 API 函数的方法,因为对这两者的兼容都是必要的。链接类型 是大小写敏感的,并且可以由实现扩展(它们不是关键字)。C 和 D 是必须提供的,其他的含义由实现定义。实现注记:对于 Win32 平台来说,应该支持 Windows 和 Pascal 。

通过下面的方式指定 C 函数调用约定:extern (C):

int foo();// 使用 C 约定调用 foo()

D 调用约定是:extern (D):

或者: extern:

Windows API 调用约定是:extern (Windows):

void *VirtualAlloc(

void *lpAddress,

uint dwSize,

uint flAllocationType,

uint flProtect

);

对齐特征对齐特征:

align

align ( 整数 )

AlignAttribute:

align

align ( Integer )

指定结构成员如何对齐。如果只有 align ,则设为默认值,即使用同对应的 C 编译器相同的默认对齐值。整数 指定了对齐的值,它的行为同对应的 C 编译器使用非默认的对齐值时相同。如果值为 1 就表示不进行对齐;成员将紧挨在一起。

废弃特征我们经常会将库中的某一特征标记为废弃,同时仍然保留它以保持向后兼容。这类声明可以被标记为废弃,这意味着可以通过设置编译器选项,在遇到引用这类声明的代码时产生错误: deprecated

{

void oldFoo();

}

实现注记: 编译器应该有一个选项用来指定是否被废弃的特征可以通过编译。

保护特征用于保护的特征有 private、 package、 protected、 public 和 export 。

private 意味着只有本类内的及本类所在模块内的成员可以访问被保护的成员。私有成员不能被重写。私有模块成员等价于 C 程序中的 static 声明。

package 扩展了 private 的访问权,这样包中的成员就可以访问位于同一包内的其他的模块内的成员。如果包是嵌套的话,这条规则只应用于最内层的包。

protected 意味着只有本类内或者派生类内的成员或者本类所在模块内的成员可以访问被保护的成员。protected 不能用于模块成员。

public 意味着可执行程序中的任何代码都可以访问这个成员。

export 意味着可执行程序外的任何代码都可以访问这个成员。export 的意思也就是从 DLL 中导出定义。

Const 特征const

const 特征声明可以在编译时估值的常量。例如: const int foo = 7;

const

{

double bar = foo + 6;

}

Override 特征override

override 特征用于虚函数。这意味着必须用具有同基类中相同的名字和参数覆盖这个函数。当某个基类的成员函数的参数变化的时候,override 特征可以用来捕获错误。这样所有派生类会得知必须更新它们的覆盖函数。class Foo

{

int bar();

int abc(int x);

}

class Foo2 : Foo

{

override

{

int bar(char c);// 错误,Foo 中没有 bar(char)

int abc(int x);// ok

}

}

Static 特征static

static 特征用于函数和数据。这意味着这个声明不会应用于一个对象的特定实例,而应用于对象的类型。换句话说,这意味着没有 this 引用。当用于其他声明时,static 会被忽略。 class Foo

{

static int bar() { return 6; }

int foobar() { return 7; }

}

...

Foo f = new Foo;

Foo.bar();// 得到 6

Foo.foobar();// 错误,没有 Foo 的实例

f.bar();// 得到 6

f.foobar();// 得到 7

静态函数决不会是虚的。

在整个程序中,静态数据只有一个实例,而不是每个对象有一个。

static 与在 C 中不同,它并不同时意味着它的作用域局限在本文件中。你可以使用 private 特征做到这一点。例如:module foo;

int x = 3;// x 是全局的

private int y = 4;// y 是 foo 中局部的

static 可以被应用于构造函数和析构函数,这样就得到静态构造函数和静态析构函数。

Auto 特征auto

auto 特征用于局部变量和类声明。对于类声明来说,auto 特征创建了一个 auto 类。对于局部声明来说,auto 实现了 RAII(资源获得即初始化)协议。这意味着当指向对象的 auto 引用脱离作用域的时候会自动调用它的析构函数。即使是由于抛出了异常而脱离作用域也会调用析构函数,因此 auto 用来保证清除。

auto 不能被用于全局的、静态的数据成员或者用 inout 或 out 修饰的参数。auto 的数组是非法的,函数返回值也不允许是 auto 的。如果不是初始化的话,是不允许对 auto 赋值的。注记:如果将来出现了某种强制性的要求,这些限制可能会放松。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有