C 样式数组不是自我描述的,因为它没有任何关于其大小的信息,因此为了迭代它的元素,我们需要以某种方式大小信息。我对 range-for 循环如何获取大小信息感到困惑。预计它会失败。考虑两个相互矛盾的例子,
#include <iostream>
using namespace std;
int main() {
int a[] = { 1, 2, 3, 4, 5, 6 };
for(auto x : a)
cout<<x<<" ";
cout<<endl;
return 0;
}
它运行成功(意外(,但是
#include <iostream>
using namespace std;
void print_a(int*);
void print_a(int a[])
{
for(auto x : a)
cout<<x<<" ";
cout<<endl;
}
int main() {
int a[] = { 1, 2, 3, 4, 5, 6 };
print_a(a);
return 0;
}
这产生了错误(预期(。
有人可以解释一下范围循环的实际工作原理吗?
从头到尾的 range-for 循环运行,表示它需要知道长度。 静态分配的数组 AKAint array[10]
编译器知道编译时的长度,所以他知道终止它们, 但是在动态分配的数组上,编译器不知道数组的长度,所以他要求循环它们