你应该再仔细阅读整个段落。
所有支持的 C 类型在 Kotlin 中都有对应的表示:
在 C 中也有左值和右值(在 C++ 中,等价于左值Type &
和Type
右值)。主要区别是左值可以设置为某个值,而右值在初始化后不能更改。因此,对于 C 中的每种类型,左值和右值都需要它自己的 Kotlin 类型。
在主题
所有支持的 C 类型在 Kotlin 中都有对应的表示:
只考虑右值。但是对于左值,您唯一需要添加的是Var
类型的结尾。唯一的例外是
对于结构(以及结构的类型定义),此表示是主要表示,并且与结构本身具有相同的名称
现在让我们回到枚举。常规的 Kotlin 枚举映射到常规的 C 枚举。所以实际上FIRST
并且SECOND
有MyEnum
两种语言的类型。但是如果你想创建一个包含MyEnum
例如的变量怎么办:
// This is C Code
MyEnum a = FIRST;
a
在 C 中具有类型MyEnum
,但它是左值(在 C++ 中是MyEnum &
),因此在 Kotlina
中将具有类型MyEnumVar
,因为这正是文档中所说的:${type}Var
, where ${type} = MyEnum
.
到下一个问题:
CPointer 的类型参数 T 必须是“左值”类型之一
所以struct S*
它应该是CPointer<SVar>
,但请记住struct
s 是例外,我们不应该添加Var
,所以这只是CPointer<S>
。
int8_t*
是CPointer<int_8tVar>
——这里也不例外。
char*
是CPointer<ByteVar>
- 再次没有例外(只有左值类型,结构除外)。
char**
是CPointer<CPointerVar<ByteVar>>
因为我们需要左值CPointer<ByteVar>
,这正是CPointerVar<ByteVar>
.
最后:
IntVar
, LongVar
,CPointerVar<T>
和其他东西是类型int
, long
,的左值CPointer
。如果您想更改函数中的对象,则可能需要这样做。类似Ref<${type}>
Java的东西。