D语言中"in"和"const"的区别

Mer*_*Hul 5 d const

阅读本教程:http://ddili.org/ders/d.en/function_parameters.html

我不明白之间的差别inconst:是什么呢?

dchar lastLetter(const dchar[] str) {
    return str[$ - 1];
}

dchar lastLetter(in dchar[] str) {
    return str[$ - 1];
}
Run Code Online (Sandbox Code Playgroud)

Dej*_*kic 8

D语言参考(http://dlang.org/function.html#parameters)部分很好地解释了它,它描述了参数存储类(省略了主题项):

  • 范围:参数中的引用无法转义(例如,分配给全局变量)
  • in:等效于const范围
  • const:参数隐式转换为const类型
  • ref:参数通过引用传递(隐式的引用类型,见下文)

当他们考虑参数存储类时,D程序员应该记住D具有值(结构,联合,静态数组和POD)和引用(动态数组,类)类型.第一组类型总是按值传递,除非您使用ref参数存储类,它将告诉D编译器通过引用显式传递.引用类型自然会通过引用传递,因此在这种情况下ref是隐含的.

  • 另外要注意的是,"范围"实际上没有按照文档记录实现,在大多数情况下现在什么都不做.所以与`const`的有效区别只是惯例, (3认同)
  • 不,`in`不会通过引用传递它(假设SampleStruct是一个结构).它将是一个`const scope`,考虑到SampleStruct(如果它是一个结构,你没有指定)是一个值类型,它将通过值传递.如果你想通过引用传递它,那么你必须使用`ref`参数存储类(即`const ref`或`auto ref`). (2认同)