【发布时间】:2014-12-09 18:24:38
【问题描述】:
我在 D 文档和函数签名中的一些地方看到了 void[] 类型。什么意思?
我已经搜索了文档中的数组部分以及谷歌,但没有找到任何结论。我发现所有数组都可以隐式转换为 void[] 类型。它只是一个无类型数组吗?
【问题讨论】:
标签: d
我在 D 文档和函数签名中的一些地方看到了 void[] 类型。什么意思?
我已经搜索了文档中的数组部分以及谷歌,但没有找到任何结论。我发现所有数组都可以隐式转换为 void[] 类型。它只是一个无类型数组吗?
【问题讨论】:
标签: d
void[] 只是一个数组。 in void[] 是一个方便的签名,用于仅将字节写入文件或其他内容的函数,因为它可以接受任何类型的数组 - void 表示类型不重要,in 表示您不打算修改或存储它,因此您也可以接受 const 或不可变数组。
要使用void[],您必须首先将其转换为其他东西,通常是ubyte[],因此元素具有允许您对其进行索引的具体大小。 void[].length 以数组中的总字节数给出,因此如果您只是将指针和数据长度传递给函数(如操作系统级别的文件写入,例如 Linux 的 write 系统调用),则传递 @987654329 @ 将写入这些字节而不关心它们代表什么。
【讨论】:
void*,这意味着指向任何东西的指针。 void* 在 C 中很常见,void[] 在 D 中用于相同类型的事物(还有一点,C 在某些地方使用 void* D 也会使用模板或类/接口——用于通用数据。)@ 987654333@ 也可以在 D 中使用,有时可以看到与 TypeInfo 参数配对,允许运行时泛型。模板通常更好,但 D 运行时库的某些部分使用 void* + TypeInfo 对(主要是出于历史原因)。所以你可能会在那里看到它。