forrange 是 C++ 的一种语法糖,比较方便,当然,不能和 python 比人性化,但已经很贴心了。
有人提出一个问题,为什么动态数组不能 forrange。
那什么可以 forrange 呢?
- 值列表 { 1,2,3 …}
- 数组
- 标准容器,或自己实现的容器类,必须有能返回迭代器的 begin,end 成员。
但动态数组不是数组,它是一段内存,动态数组是指向这段内存头数据的指针,它甚至没有数组的 size,所以你 sizeof 动态数组,返回的是一个指针的 size。
当然,如果你想坑程序的后继维护者,请用:
int frg[] = {1, 2, 3, 4, 5, 6, 7, 8};
int *frgp = new int[8];
memcpy(frgp, frg, 8 * sizeof(int));
for (const auto &i : *reinterpret_cast<int(*)[8]>(frgp))
{
std::cout << i << std::endl;
}
保证他们摸不着头脑。
所以,别用!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)