基于范围的循环不适用于数组的指针

Les*_*ite 0 c++ arrays

为什么基于范围的for循环不适用于数组的指针?

auto pCollection = new int[3] { 0,1,2 };
// error C3312: no callable 'begin' function found for type 'int *'
for (auto value : pCollection)
{
    std::cout << value << std::endl;
}
delete[] pCollection;
Run Code Online (Sandbox Code Playgroud)

但可以在数组上使用:

int collection[3]{ 0,1,2 };
for (auto value : collection)
{
    std::cout << value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ker 7

指针不是数组.从指针本身无法知道指针指向的位置可能有多少元素,也可能没有多少元素.

  • @AppWriter No.技术上,数组可以*衰减*到指针.但是数组是一个与它可以衰变的指针不同的类型 (3认同)
  • @AppWriter:从技术上讲,你错了. (3认同)
  • @AppWriter:不,数组是一个数组.在大多数情况下,数组类型的表达式被隐式转换为指向其第一个元素的指针,但这不会使数组指针. (3认同)