由上可知,在一些情况下数组的操作实际上是指针的操作,这一结论有很多隐含的意思。其中一层意思是当使用数组作为auto变量的初始值时,推断得到的类型是指针而非数组:
int ia[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; //ia是一个含有10个整数的数组 auto ia2(ia); //ia2是一个整型指针,指向ia的第一个元素 ia2 = 42; //错误:ia2是一个指针,不能用int值给指针赋值
尽管ia是由10个整数构成的数组,但当使用ia作为初始值时,编译器实际执行的初始化过程类似于下面的形式:
auto ia2(&ia[0]); //显然ia2的类型是int*
必须指出的是,当使用decltype关键字时上述转换不会发生,decltype(ia)返回的类型是由10个整数构成的数组:
//ia3是一个含有10个整数的数组 decltype(ia) ia3 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; ia3 = p; //错误:不能用整型指针给数组赋值 ia3[4] = i; //正确:把i的值赋给ia3的一个元素