const(和in)
考虑有 C 函数:
unsigned int foo(const unsigned int a);
const对生成的代码没有影响,就好像代码通过编译一样,const如果没有,什么都不会破坏const——所以 C 编译器在编译时只使用它作为代码契约说明符。
是否有任何努力在 D 中编写uint foo(in uint a);或uint foo(const uint a);调用此函数?这是否可以帮助 D 编译器生成更有效的调用代码foo,或者这将不起作用(至少对于值类型参数)?
ref和out
有C函数
unsigned int bar(unsigned int *a);
我是否必须uint bar(uint* a);在将其翻译为 D 时使用指针语法,或者我可以写uint bar(ref uint a);(或者uint bar(out uint a);,如果我知道这a仅用于输出,来自文档bar)?ref和下是否还有其他隐藏机制out,或者它们看起来只是简单的指针?out当调用超出 D 范围时,D会生成“胶水代码”以将参数初始化为其默认值吗?
更新 1:我编写了简单的代码来测试如何在参数中处理refs 和outs — 它们实际上至少对于ints 来说似乎是普通指针,但out在传递时不会重置为初始值 — C 端仍然可以读取它的值并修改它,所以它有效地表现得像ref。我不确定,当我以这种方式使用东西时,是否会出现与 GC 相关的问题。
Update2:在函数结果中使用ref而不是指针也可以按预期方式工作。const仍然未经测试,我不知道如何检查它而不需要反汇编我的程序。