Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin/Native中的${type}Var是什么?_Kotlin_Kotlin Native - Fatal编程技术网

Kotlin/Native中的${type}Var是什么?

Kotlin/Native中的${type}Var是什么?,kotlin,kotlin-native,Kotlin,Kotlin Native,当它试图说明什么是${type}Var时,我非常不清楚 …对于Kotlin枚举,它被命名为${type}Var 哇?!什么是Kotlin枚举?常规Kotlin枚举 enum class MyEnum { FIRST, SECOND } 我不认为这意味着什么 好的,让我们看一下本文档中的示例: struct S*映射到CPointer,int8\u t*映射到CPointer 好了,清楚了 char**映射到CPointer 为什么char**映射到CPointer而不是CPointer

当它试图说明什么是
${type}Var
时,我非常不清楚

…对于Kotlin枚举,它被命名为
${type}Var

哇?!什么是Kotlin枚举?常规Kotlin枚举

enum class MyEnum {
    FIRST, SECOND
}
我不认为这意味着什么

好的,让我们看一下本文档中的示例:

struct S*
映射到
CPointer
int8\u t*
映射到
CPointer

好了,清楚了

char**
映射到
CPointer

为什么
char**
映射到
CPointer
而不是
CPointer


所以最后的问题是:什么是
IntVar
LongVar
CPointerVar
以及其他类似
${type}Var

你应该仔细阅读整段内容

所有受支持的C类型在Kotlin中都有相应的表示:

  • 枚举可以映射到Kotlin枚举

<>也有C值和值(C++中的等价值是类型和对于LValk和主要区别在于左值可以设置为某个值,而右值在初始化后不能更改。所以对于C中的每种类型,对于左值和右值,都需要它自己的Kotlin类型

在主题中

所有受支持的C类型在Kotlin中都有相应的表示:

只考虑右值。 但对于左值,唯一需要添加的是
Var
到类型末尾。唯一的例外是

对于结构(以及从typedefs到structs),此表示是主要的,并且与结构本身具有相同的名称

现在让我们回到枚举。常规Kotlin枚举映射到常规C枚举。所以实际上
FIRST
SECOND
两种语言都有type
MyEnum
。但是,如果要创建一个包含
MyEnum
的变量,例如:

// This is C Code
MyEnum a = FIRST;
< >代码> A<代码> MyEnum中的类型<代码> > Kotlin >代码,但它是LValk(C++中的代码< MyNeNUM和代码>),所以在< <代码> < <代码>中,将有类型<代码> MyEnumVar <代码>,因为这正是文档中所说的:<代码> ${Type } Var < /C> >,其中代码> ${Type }=MyEnum
关于下一个问题:

CPointer的类型参数T必须是“左值”类型之一

所以对于
struct S*
应该是
CPointer
,但是请记住
struct
S是例外,我们不应该添加
Var
,所以这只是
CPointer

  • int8\u t*
    CPointer
    -这里没有例外
  • char*
    CPointer
    ——同样没有例外(只有左值类型,结构除外)
  • char**
    CPointer
    ,因为我们需要
    CPointer
    的左值,这正是
    CPointerVar
最后:
IntVar
LongVar
CPointerVar
和其他东西都是
int
long
CPointer
类型的左值。如果要更改函数中的对象,可能需要这样做。类似于Java中的
Ref

什么是
IntVar
LongVar
CPointerVar
和其他类似
${type}Var
的东西

这是你引用的句子的开头和结尾:

表示此类型左值的Kotlin类型,即位于内存中的值,而不是简单的不可变自包含值

“位于内存中”意味着您可以获取它们的地址(使用C或Kotlin中的
&
运算符)

哇?!什么是Kotlin枚举?常规Kotlin枚举

enum class MyEnum {
    FIRST, SECOND
}
是的,所以当Kotlin/Native看到
MyEnum
时,它也会生成
MyEnumVar

为什么
char**
映射到
CPointer
而不是
CPointer

CPointer
是非法的:,
Byte
CPointer
不合法。他们需要扩展CPointed的原因是因为取消对指针的引用会给出一个左值:某个有地址的东西


有关C(和C++)中左值的更多信息,请参见或。

您断章取义地引用了全文:“对于structs(和typedefs to structs),此表示是主要的,并且与结构本身具有相同的名称,对于Kotlin枚举,它被命名为${type}Var,对于CPointer,它是CPointerVar,对于大多数其他类型,它是${type}Var。”是的,它讲的是普通的kotkin酶。不,Byte不是枚举,但大多数其他类型也遵循${type}Var模式。“主要区别在于左值可以设置为某个值,而右值在初始化后不能更改。”我不会这么说,因为
x
in
const int x=0
中的
x
在很大程度上仍然是左值。