-
-
Notifications
You must be signed in to change notification settings - Fork 224
Document []const T and [*]const T #288
Copy link
Copy link
Open
Description
Great guide! Was able to start writing snippets right away! The only feature I've had to research outside the guide is the meaning of []const T and [*]const T types.
It's briefly shown in the Slices and Sentinel Termination chapters, although not really explained.
As I understood it, using const in this way means that the slice or many-item pointer won't be used to modify the underlying data, although says nothing about
- whether the underlying data is modifiable,
- whether the slice/mip itself is a var or const.
pub fn main() !void {
var array1: [5]u8 = [_]u8{ 1, 2, 3, 4, 5 };
const slice1: []const u8 = &array1;
var slice2: []const u8 = &array1;
const mip1: [*]const u8 = &array1;
var mip2: [*]const u8 = &array1;
// ...and all the above work too if `array1` was `const`
slice2 = &array1; // to avoid error: local variable is never mutated
mip2 = &array1; // to avoid error: local variable is never mutated
// to avoid unused variable error
std.debug.print("{any}\n{any}\n{any}\n{any}\n", .{ slice1, slice2, mip1, mip2 });
}It may also be worth explaining that more types, like strings, can coerce to []const T and therefore advisable to use this type over the non-const version when the data doesn't need to be modified.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels