中的
scope
是什么
void foo(scope void* p) { }
意思?
(我不是在讨论scope(exit)
或scope int x = 5;
,而是在参数列表中使用的scope
。)
答案 0 :(得分:22)
D中scope
有3种用途。
scope
陈述。这是您使用scope(success)
,scope(failure)
或scope(exit)
时的情况。如果没有抛出异常,抛出异常,或者无论是否为成功,失败和退出抛出异常,退出scope
语句所在的范围时,将运行以下块中的语句分别。 scope
的使用保留在语言中。
scope
关于局部变量。这将变量放在堆栈上 - 即使它是一个类。该对象在离开范围时被销毁。这种scope
的使用是不安全的,最终会从语言中删除(尽管std.typecons.scoped会替换那些想要危险生活的人。)
scope
关于函数参数(这是您要询问的用例)。当放置在作为委托的参数上时,这意味着不能转义对该参数的引用(即,分配给全局变量)。当编译器在委托上看到这一点时,它将避免在获取本地函数的地址时分配闭包。这在opApply
循环(reference post on newsgroup)中至关重要。目前,scope
对除委托之外的任何函数参数都没有影响,并且对于所有其他类型都会被忽略,尽管在将来的某个时候它可能会或可能不会被扩展以影响像指针这样的类型以防止它们逃脱功能
在函数参数上使用时,in
关键字是const scope
的别名,这通常是无意中使用scope
函数参数的方式。
答案 1 :(得分:0)