如何解决为什么字符串数组需要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
适用于声明中的下一个内容。
因此[_][] u8
是u8
个切片的数组,而[_][] const u8
是const 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 举报,一经查实,本站将立刻删除。