- 浏览: 220989 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
dysking:
SWT 和 JFace -
wangyuhfut:
东西不少啊。学习中。。。
一个比较好、中文说明的emacs配置文件 1 -
pacocai:
呵呵!学习,学习~~~不过要说编辑器的话个人更喜欢用VIM,比 ...
一个比较好、中文说明的emacs配置文件 1 -
zhf1zhf2:
这两百多个记起来也不容易啊
英国人是这样背的! -
regex:
试了两次,都是乱码,版本是23.1.1,看来不适合
汉化 Emacs 菜单
以下“属性”都应改为“特性”
属性指示器:
属性 :
属性 声明定义块
属性:
连接属性
对齐属性
Pragma
deprecated
ProtectionAttribute
static
final
override
abstract
const
auto
scope
单个声明块
单个声明定义
{ }
{ 多个声明定义 }
属性指的是用来修改一个或多个声明的方法。一般的形式有:
attribute declaration; 仅对该声明有效
attribute: 对所有声明都有效,直到
当前作用域的结尾
declaration;
declaration;
...
attribute 对语句块中所有的声明都有效
{
declaration;
declaration;
...
}
对于出现在可选的 else 子句中的声明:
attribute
declaration;
else
declaration;
attribute 对语句块中所有的声明都有效
{
declaration;
declaration;
...
}
else
{
declaration;
declaration;
...
}
6.1 连接属性(Linkage Attribute)
连接属性:
extern
extern ( 连接类型 )
连接类型:
C
C++
D
Windows
Pascal
System
D 提供了一种方便的调用 C 函数和操作系统 API 函数的方法,因为对这两者的兼容都是必
要的。链接类型 是大小写敏感的,并且可以由具体实现进行扩展(但它们不能是关键
字)。C 和 D 是必须要有的,其它的则取决于具体的实现。C++ 被保留以便将来使用。
System 在 Windows 平台里等同于 Windows;而对于其它平台,则等同于 C。实现注意:
对于 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
);
2 对齐属性(Align Attribute)
对齐属性:
align
align ( Integer )
指定结构成员如何对齐。如果只有align 则设为默认值,即使用同对应的 C 编译器相同的默
认对齐值。整数 指定了对齐的值,它的行为同对应的 C 编译器使用非默认的对齐值时相
同。
匹配其它 C 编译器的行为可能会产生一些令人惊讶的结果,例如下面的可用于 Digital Mars
C++:
struct S
{ align(4) byte a; // 被放置到了偏移 0 处
align(4) byte b; // 被放置到了偏移 1 处
}
“对齐属性”用于兼容 C ABI,这个跟跨平台的二进制兼容是不一样的。对于它,使用压缩
的结构:
align (1) struct S
{ byte a; // 被放置到了偏移 0 处
byte[3] filler1;
byte b; // 被放置到了偏移 4 处
byte[3] filler2;
}
值 1 表示不进行对齐;成员被压缩在一起。
不对使用“New表达式”在不是 size_t 的倍数的边界上分配的引用或指针进行对齐操
作。垃圾回收器假定 gc 所分配对象的指针和引用是在 size_t 字节边界上。如果不是那
些,就会导致未定义行为。
在被应用到那些不是结构或结构成员的声明时,“对齐属性”会被忽略掉。
3 废弃属性(Deprecated Attribute)
我们经常会将库中的某一属性标记为废弃,同时仍然保留它以保持向后兼容。这类声明可以
被标记为废弃,这意味着可以通过设置编译器选项,在遇到引用这类声明的代码时产生错
误:
deprecated
{
void oldFoo();
}
实现注意: 编译器应该有一个选项用来指定是否被废弃的属性可以通过编译。
4 保护属性(Protection Attribute)
ProtectionAttribute:
private
package
protected
public
export
可用的保护属性有:private、package、protected、public 或 export。
private(私有的)表示只有本类的成员,或者跟该类处于同一模块内的成员和函数,才可以
访问该成员。私有成员不能被重写。私有模块成员等价于 C 程序中的 static 声明。
package(包)扩展了 private 的访问权限,这样包中的成员就可以访问位于同一包内的其他的模块内的成员。如果一个模块位于嵌套的包,那么这条规则只对最里层的包有效。
protected(受保护的)表示只有本类的成员,或者所有自它派生的类的成员,或者跟该类处于同一模块内的成员和函数,才可以访问该成员。如果通过一个派生类成员函数访问一个被
保护的实例成员,则访成员仅能被那些是该成员函数调用的“this”对象实例访问。模块成员进行保护是非法的。
public(公有的)表示在可执行程序中的任何代码都可以访问这个成员。
export(导出)表示可执行程序外的任何代码都可以访问这个成员。导出的意思也就是从
DLL 中导出定义。
5 常量属性(Const Attribute)
const
const 属性声明可以在编译时进行求值的常量。例如:
const int foo = 7;
const
{
double bar = foo + 6;
}
这一段2.014里没有,其余一样。
没有初始值的 const 声明在构造函数里(对于类字段)或者在静态构造函数里(对于静态类
成员或模块变量声明)必须被初始化。
const int x;
const int y;
static this()
{
x = 3; // 正确
// 错误:y 未被初始化
}
void foo()
{
x = 4; // 错误,x 是 const 并且不在静态构造函数里
}
class C
{
const int a;
const int b;
static const int c;
static const int d;
this()
{ a = 3; // 正确
a = 4; // 正确,允许重复初始化
C p = this;
p.a = 4; // 错误,只能是 this 实例的成员
c = 5; // 错误,应该在静态构造函数里进行初始化
// 错误,b 未被初始化
}
this(int x)
{
this(); // 正确,传送构造函数
}
static this()
{
c = 3; // 正确
// 错误,d 未被初始化
}
}
如果没有构造函数,让 const 模块变量声明没有初始值并不是个错误。这个用于支持让模块
服务仅做为不被连接的声明,而其实现将会放置在另一个要链接模块里。
6 重写属性(Override Attribute)
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); // 正确
}
}
7 静态属性(Static Attribute)
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;
静态函数决不能是虚的(vitual)。
在整个程序中,静态数据只有一个实例,而不能每个对象都有一个。
static 并没有 C 中那样局限于一个文件的功能。在 D 里,可以使用 private 属性来实现它。
例如:
module foo;
int x = 3; // x 是全局的
private int y = 4; // y 仅限于模块 foo 中有效
8 自动属性(Auto Attribute)
auto
auto 属性用于局部变量和类声明。
auto i = 6.8; // 声明 i 为 double
9 域属性(Scope Attribute)
scope
scope 属性用于局部变量和类声明。对于类声明,scope 属性会创建一个 scope 类。对于局部变量,scope 实现RAII(资源获得即初始化)协议。即表示对象的析构函数自动被调用,当对它的引用 超出作用域时。即使通过抛出异常退出了该作用域,析构函数还是会被调
用,这样 scope 就被用来保证清除工作。
如果有不只一个 scope 变量超出了同一个点的作用域,那么析构函数会依着跟创建这些变量
时相反的顺序被调用。
scope 不能用于全局变量、静态变量、数据成员,以用 ref 或 out 参数。scope 数组是不被允许的,并且 scope 函数返回值也是不允许的。分配一个 scope,而不是初始化,同样不被允许。
基本解释: 这些限制在将来可能被放松,如果理由充分的话。
10 抽象属性(Abstract Attribute)
如果一个类是抽象,那么它就不能被直接实例化。它只能被当作另一个非抽象类的基类进行
实例化。
如果类被定义时,内部有一个抽象属性(abstract attribute),或者在它内部的某些虚成员函数被声明成抽象的,那么这个类就是抽象的。
非虚函数不能被声明成抽象的。
函数声明成抽象的仍然可以拥有函数体。这就是为什么即使它们必须被重写(override),仍然能够提供“基类功能。”
。。。
属性指示器:
属性 :
属性 声明定义块
属性:
连接属性
对齐属性
Pragma
deprecated
ProtectionAttribute
static
final
override
abstract
const
auto
scope
单个声明块
单个声明定义
{ }
{ 多个声明定义 }
属性指的是用来修改一个或多个声明的方法。一般的形式有:
attribute declaration; 仅对该声明有效
attribute: 对所有声明都有效,直到
当前作用域的结尾
declaration;
declaration;
...
attribute 对语句块中所有的声明都有效
{
declaration;
declaration;
...
}
对于出现在可选的 else 子句中的声明:
attribute
declaration;
else
declaration;
attribute 对语句块中所有的声明都有效
{
declaration;
declaration;
...
}
else
{
declaration;
declaration;
...
}
6.1 连接属性(Linkage Attribute)
连接属性:
extern
extern ( 连接类型 )
连接类型:
C
C++
D
Windows
Pascal
System
D 提供了一种方便的调用 C 函数和操作系统 API 函数的方法,因为对这两者的兼容都是必
要的。链接类型 是大小写敏感的,并且可以由具体实现进行扩展(但它们不能是关键
字)。C 和 D 是必须要有的,其它的则取决于具体的实现。C++ 被保留以便将来使用。
System 在 Windows 平台里等同于 Windows;而对于其它平台,则等同于 C。实现注意:
对于 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
);
2 对齐属性(Align Attribute)
对齐属性:
align
align ( Integer )
指定结构成员如何对齐。如果只有align 则设为默认值,即使用同对应的 C 编译器相同的默
认对齐值。整数 指定了对齐的值,它的行为同对应的 C 编译器使用非默认的对齐值时相
同。
匹配其它 C 编译器的行为可能会产生一些令人惊讶的结果,例如下面的可用于 Digital Mars
C++:
struct S
{ align(4) byte a; // 被放置到了偏移 0 处
align(4) byte b; // 被放置到了偏移 1 处
}
“对齐属性”用于兼容 C ABI,这个跟跨平台的二进制兼容是不一样的。对于它,使用压缩
的结构:
align (1) struct S
{ byte a; // 被放置到了偏移 0 处
byte[3] filler1;
byte b; // 被放置到了偏移 4 处
byte[3] filler2;
}
值 1 表示不进行对齐;成员被压缩在一起。
不对使用“New表达式”在不是 size_t 的倍数的边界上分配的引用或指针进行对齐操
作。垃圾回收器假定 gc 所分配对象的指针和引用是在 size_t 字节边界上。如果不是那
些,就会导致未定义行为。
在被应用到那些不是结构或结构成员的声明时,“对齐属性”会被忽略掉。
3 废弃属性(Deprecated Attribute)
我们经常会将库中的某一属性标记为废弃,同时仍然保留它以保持向后兼容。这类声明可以
被标记为废弃,这意味着可以通过设置编译器选项,在遇到引用这类声明的代码时产生错
误:
deprecated
{
void oldFoo();
}
实现注意: 编译器应该有一个选项用来指定是否被废弃的属性可以通过编译。
4 保护属性(Protection Attribute)
ProtectionAttribute:
private
package
protected
public
export
可用的保护属性有:private、package、protected、public 或 export。
private(私有的)表示只有本类的成员,或者跟该类处于同一模块内的成员和函数,才可以
访问该成员。私有成员不能被重写。私有模块成员等价于 C 程序中的 static 声明。
package(包)扩展了 private 的访问权限,这样包中的成员就可以访问位于同一包内的其他的模块内的成员。如果一个模块位于嵌套的包,那么这条规则只对最里层的包有效。
protected(受保护的)表示只有本类的成员,或者所有自它派生的类的成员,或者跟该类处于同一模块内的成员和函数,才可以访问该成员。如果通过一个派生类成员函数访问一个被
保护的实例成员,则访成员仅能被那些是该成员函数调用的“this”对象实例访问。模块成员进行保护是非法的。
public(公有的)表示在可执行程序中的任何代码都可以访问这个成员。
export(导出)表示可执行程序外的任何代码都可以访问这个成员。导出的意思也就是从
DLL 中导出定义。
5 常量属性(Const Attribute)
const
const 属性声明可以在编译时进行求值的常量。例如:
const int foo = 7;
const
{
double bar = foo + 6;
}
这一段2.014里没有,其余一样。
没有初始值的 const 声明在构造函数里(对于类字段)或者在静态构造函数里(对于静态类
成员或模块变量声明)必须被初始化。
const int x;
const int y;
static this()
{
x = 3; // 正确
// 错误:y 未被初始化
}
void foo()
{
x = 4; // 错误,x 是 const 并且不在静态构造函数里
}
class C
{
const int a;
const int b;
static const int c;
static const int d;
this()
{ a = 3; // 正确
a = 4; // 正确,允许重复初始化
C p = this;
p.a = 4; // 错误,只能是 this 实例的成员
c = 5; // 错误,应该在静态构造函数里进行初始化
// 错误,b 未被初始化
}
this(int x)
{
this(); // 正确,传送构造函数
}
static this()
{
c = 3; // 正确
// 错误,d 未被初始化
}
}
如果没有构造函数,让 const 模块变量声明没有初始值并不是个错误。这个用于支持让模块
服务仅做为不被连接的声明,而其实现将会放置在另一个要链接模块里。
6 重写属性(Override Attribute)
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); // 正确
}
}
7 静态属性(Static Attribute)
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;
静态函数决不能是虚的(vitual)。
在整个程序中,静态数据只有一个实例,而不能每个对象都有一个。
static 并没有 C 中那样局限于一个文件的功能。在 D 里,可以使用 private 属性来实现它。
例如:
module foo;
int x = 3; // x 是全局的
private int y = 4; // y 仅限于模块 foo 中有效
8 自动属性(Auto Attribute)
auto
auto 属性用于局部变量和类声明。
auto i = 6.8; // 声明 i 为 double
9 域属性(Scope Attribute)
scope
scope 属性用于局部变量和类声明。对于类声明,scope 属性会创建一个 scope 类。对于局部变量,scope 实现RAII(资源获得即初始化)协议。即表示对象的析构函数自动被调用,当对它的引用 超出作用域时。即使通过抛出异常退出了该作用域,析构函数还是会被调
用,这样 scope 就被用来保证清除工作。
如果有不只一个 scope 变量超出了同一个点的作用域,那么析构函数会依着跟创建这些变量
时相反的顺序被调用。
scope 不能用于全局变量、静态变量、数据成员,以用 ref 或 out 参数。scope 数组是不被允许的,并且 scope 函数返回值也是不允许的。分配一个 scope,而不是初始化,同样不被允许。
基本解释: 这些限制在将来可能被放松,如果理由充分的话。
10 抽象属性(Abstract Attribute)
如果一个类是抽象,那么它就不能被直接实例化。它只能被当作另一个非抽象类的基类进行
实例化。
如果类被定义时,内部有一个抽象属性(abstract attribute),或者在它内部的某些虚成员函数被声明成抽象的,那么这个类就是抽象的。
非虚函数不能被声明成抽象的。
函数声明成抽象的仍然可以拥有函数体。这就是为什么即使它们必须被重写(override),仍然能够提供“基类功能。”
。。。
发表评论
-
土耳其文《d编程》range 翻译 一
2011-11-15 02:01 1507Ranges 范围 Ranges are an abstra ... -
土耳其文《d编程》range 翻译 二
2011-11-15 01:59 1006As you can see, that output doe ... -
d2 range 和 标准C++中的Iterator(迭代器)简介
2011-05-07 12:59 2117原文: http://hi.baidu.com/c ... -
三访安德烈Alexandrescu(第2部)
2010-08-20 12:53 1422Google翻译哦 面试------> 应翻成 访谈 ... -
三访安德烈Alexandrescu(第一部分)
2010-08-20 12:43 1349google翻译哦 Interview with Andre ... -
Garden Editor project 日记 之二 10.16 ---
2009-10-16 02:39 02009.10.16 T[new] misgivings ... -
Garden Editor project 日记 之一 09.09.25 --- 10.15
2009-09-24 22:56 0kill two birds with one stone, ... -
template metaprogramming 9
2009-09-09 16:08 1169原文:https://docs.google.co ... -
Floating Point in D (2.030 新)
2009-05-12 23:27 20485.17 23:50 更新 5.16 20:30 翻译更 ... -
Migrating to Shared (2.030 新)
2009-05-12 23:03 11545.19 0:10 更新(完成) ... -
D 2.0 的gc
2008-12-04 19:53 1251http://lucifer1982.wordpress.co ... -
垃圾回收 2.014
2008-06-10 07:20 983无版本差异 D 是一种全面采用垃圾回收(Garbage Co ... -
类 class 2.014
2008-06-09 22:51 1085D 的面向对象的特性都来源于类。类层次里的顶层是 Object ... -
接 口 2.014
2008-06-09 22:51 843接口声明: interface 标 ... -
C 语言接口 2.014
2008-06-09 22:50 1029D 的设计就是要在目标系统上能够很好地符合于 C 编译器。D ... -
Traits 特征 2.014
2008-06-07 11:25 12466.14 翻译 (d语言的反 ... -
常量和不变量 Const and Invariant 2.014
2008-06-07 11:22 1312请参考: D 2.0 Const/Final/Invarian ... -
词法 2.014
2008-06-07 10:22 1501在 D 中,词法分析独立于语法分析和语义分析。词法分析器是将源 ... -
枚 举 2.014
2008-06-07 08:41 1155枚举声明: enum 枚举标记 枚举体 enum 枚举体 en ... -
函 数 2 (2.014)
2008-06-07 08:22 10327 嵌套函数 函数可以被 ...
相关推荐
commons-attributes-api.jar,commons-attributes-compiler.jar,commons-beanutils.jar,commons-codec.jar,commons-collections.jar,commons-dbcp.jar,commons-digester.jar,commons-discovery.jar,commons-...
commons-attributes-2.2.zipcommons-attributes-2.2.zipcommons-attributes-2.2.zipcommons-attributes-2.2.zipcommons-attributes-2.2.zipcommons-attributes-2.2.zip
Sirenix.OdinInspector.Attributes.dll
SAX2 extension helper for additional Attributes information, implementing the Attributes2 interface.
org-gephi-data-attributes-api可视化软件gephi的插件,nbm格式,
commons-attributes-api.jar
FIFA15 fifa15 attributes update 4.CT
Memcached session管理器(例如spymemcached或xmemcached)通常需要与特定版本的Tomcat和其他相关库相匹配,以确保所有组件之间的兼容性。当这些库的版本不匹配时,就可能导致上述错误。 为了解决这个问题,我们...
gt_Attributes_97.tcl
2 Setting Up WordPress 2.1.1 The Famous Five Minute Install .............................23 2.1.2 Where To Install? .......................................................................23 2.1.3 ...
tkinter的menu attributes示例代码,结合https://blog.csdn.net/weixin_43708622/article/details/107053182一起学习
Magento用户手册目录 第一章:Magento介绍......................................................................设定配置和属性(Setting up configuration and Attributes)........................................
标题中的"View and change change file attributes. Must see." 提醒我们关注的是文件属性的查看与修改,这是一个在计算机操作系统中常见的操作。文件属性通常包括隐藏、只读、系统、存档等标志,这些属性影响了文件...
spring的lib下的这个jar包有问题.这个是好的。
Special Attributes..................................3 Main Execution / Script Parameters....4 Operators............................................4 Priority..............................................