类型
类型修饰符
在Auto语言早期设计里,类型的修饰符是前置的,如数组([]int),这个设计借鉴了Go语言的。
但在开发C转译器的过程中,我发现这种前置的修饰符,和C很多时候正好相反,容易混淆。 例如指针类型(*File),在C语言里是(File*)。
经过思考,我发现实际上如果统一前置或者统一后置,效果其实是一样的,关键是要统一。
考虑到Auto语言和C语言的紧密关系,我决定把所有的类型修饰符都设计为后置模式:
- 数组类型:
- 动态数组:
int[] - 定长数组:
int[10] - 多维数组:
int[3][10] - 多维动态数组:
int[][][]
- 指针类型:
- 指针:
int* - 多级指针:
char** - 由指针组成的数组:
int*[3] - 指向数组的指针:
int[]*
- 引用类型:
- 引用:
int& - 多级引用:
char&& - 由引用组成的数组:
int&[3] - 指向引用的指针:
int&*
- 可选类型:
- 可选:
int? - 多级可选:
char?? - 由可选组成的数组:
int?[3] - 指向可选的指针:
int?*
注意,多维数组的维度顺序,和C/C++一样,是左侧为外围维度,右侧为内部维度:
auto
let arr int[3][10] = [[0..10], [1..11], [2..12]]这里arr是一个长度为3的数组,其中每个元素都是一个长度为10的int数组。
要获取这个2维数组的最后一个元素,用:
auto
let last = arr[2][9]这样获取元素的维度和声明类型的维度,顺序是一致的。都是先外围,再内部。