微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么字符串数组需要infix const?

如何解决为什么字符串数组需要infix const?

我正在慢慢学习zig,但是我不了解const及其与数组/类型的交互方式-我正在研究https://ziglang.org/documentation/0.6.0/#Introduction,但他们经常在字符串中使用const。

它将编译:

var n  = [_][]const u8 {"test 1","test4","test   6","zz"};

没有const错误

var n  = [_][] u8 {"test 1","zz"};

error: expected type '[]u8',found '*const [6:0]u8'

类似地,将const放在左侧是相同的错误

const n  = [_][]u8 {"test 1","zz"};

将const关键字放在中间,实际上是指示编译器执行的方式是什么?

解决方法

在Zig中,const适用于声明中的下一个内容。

因此[_][] u8u8个切片的数组,而[_][] const u8const u8的切片的数组。您的字符串文字是*const [_:0]u8(指向u8的空终止数组的指针;这是错误消息中的*const [6:0] u8的来源),Zig可以将其强制转换为const u8的切片。>

一些例子以及它们的可变性:

[_][]u8-一切都是可变的。

var move: [3][]u8 = undefined;
var ziga: [4]u8 = [_]u8{ 'z','i','g','s' };
const zigs: []u8 = ziga[0..];
move[0] = zigs;
move[0][1] = 'a';

[_][] const u8-切片是可变的,但其中的内容不是可变的。

var belong_to_us = [_][]const u8{ "all","your","base","are" };
var bomb = [_][]const u8{ "someone","set","up","us" };
belong_to_us = bomb;

但是

bomb[0][0] = 'x'; // error: cannot assign to constant

const [_][] const u8-整个事情都是不变的。

const signal: [3][]const u8 = [_][]const u8{ "we","get","signal" };
const go: [3][]const u8 = [_][]const u8{ "move","every","zig" };
signal = go; // error: cannot assign to constant

但是,

const [_][]u8-这是u8切片的const数组。

var what: [4]u8 = [_]u8{ 'w','h','a','t' };
const signal: [3][]u8 = [_][]u8{ zigs,what[0..],zigs };
signal[0][1] = 'f'; // Legal!
signal[1] = zigs; // error: cannot assign to constant

最后一个是可变u8可变切片的恒定数组。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。