为什么不能构建范围表达式将数组作为函数参数传递并在范围内用于语句.谢谢您的帮助
void increment(int v[]){
// No problem
int w[10] = {9,8,7,6,5,4,3,2,1,9};
for(int& x:w){
std::cout<<"range-for-statement: "<<++x<<"\n";
}
// error: cannot build range expression with array function
// parameter 'v' since parameter with array type 'int []' is
// treated as pointer type 'int *'
for(int x:v){
std::cout<<"printing "<<x<<"\n";
}
// No problem
for (int i = 0; i < 10; i++){
int* p = &v[i];
}
}
int main()
{
int v[10] = {9,8,7,6,5,4,3,2,1,9};
increment(v);
}
Run Code Online (Sandbox Code Playgroud)
尽管出现了,v但是指针不是数组 - 正如错误信息所示.内置数组是奇怪的东西,不能被值复制或传递,并且在尴尬的时刻默默地变成指针.
无法知道它指向的数组的大小,因此无法生成循环来迭代它.选项包括:
std::array或std::vector这是因为你将数组传递给函数的方式.正如所写,它衰败到指针.尝试
template<int N>
void increment(int (&v)[N])
{
for (int x : v) std::cout << "printing " << x << "\n";
}
int main()
{
int v[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 9 };
increment(v);
}
Run Code Online (Sandbox Code Playgroud)
这样运行是因为int在函数中传递了对N s 数组的引用,并且(与指针不同)循环的范围可以迭代这些.
| 归档时间: |
|
| 查看次数: |
1564 次 |
| 最近记录: |