C++中循环和 C 样式数组的范围工作



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]编译器知道编译时的长度,所以他知道终止它们, 但是在动态分配的数组上,编译器不知道数组的长度,所以他要求循环它们

最新更新