Swift 将 C const 指针视为可变的?

Bear_dk

我正在使用桥接头在 Swift 中导入 C 标头。我的 C API 看起来像这样:

typedef struct MyStruct {
  char buff[80];
} MyStruct;

const char* GetBuff(const MyStruct* m);

现在在 Swift 中,我尝试这样称呼它:

let b = MyStruct()
let mystr = String(cString: GetBuff(&b))

然后我得到这个编译错误:“不能将不可变值作为 inout 参数传递:'b' 是一个 'let' 常量”。为什么是这样?GetBuff() 的参数是一个常量指针。const 指针不是不可变的吗?

我知道将 'b' 更改为 'var b' 可以解决问题,但为什么有必要呢?

马丁·R

let b是一个常量,因此您不能将其作为 inout 参数传递给&b. 但是您可以使用withUnsafePointer(to:)获取指向其值的(临时)指针并将其传递给 C 函数。

let b = MyStruct()
let mystr = withUnsafePointer(to: b) { String(cString: GetBuff($0)) }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++将const char *指针数组传递给对象

如何在可变模板推导期间将指针隐式转换为 const 指针

为什么将数组视为函数参数C ++中的指针?

将const指针转换为非const

C ++ const双指针

无法将“ const指针const”传递给const ref

C ++ const方法返回非const指针

c-将指向const int的指针转换为仅指向int的指针(并对其进行修改)

将“指向const的指针”转换为“指向const VLA的指针”

ARC禁止将非目标C指针类型'const UInt8 *'(aka'const unsigned char *')强制转换为'NSData *'

const和C中的指针

const void指针的C ++语法

JNA将等效的Swift指针从Java Android传递给C

是否可以将Swift类转换为C void *指针?

将FILE *指针从Swift传递给C函数

将Swift协议传递给Objective-C指针

C ++:将字符串指针设置为const字符串值

如何将 const struct 指针传递给 C++ 中的 setter 方法

C++ 是否将字符指针视为 C 样式字符串?

通过函数中的引用将const指针传递给const

将const双指针返回到const数据

将const结构引用转换为非const指针

为什么不使用is_const类型特征将const引用视为const?

C ++通过const指针或对const指针的引用传递

将 const 添加到指针类型

将C数组名称视为原始指针,然后复制到shared_ptr

将C ++指针视为内存地址在多大程度上可以接受?

const 指针 vs 指针:C++

C ++:为什么我可以将指针值成员变量从const成员函数传递给采用非const指针参数的外部函数?