当我做这样的事情时:
int my_array[5] = {1, 2, 3, 4, 5};
for (int &x : my_array) {
x *= 2;
}
C++11 显然知道我的数组只有 5 个元素。此信息是否存储在 my_array 对象中的某处?
如果是这样,是否有任何充分的理由说明我作为开发人员无法使用它(或者是?!?!?)?如果 C++ 开发人员始终知道他们正在处理的数组的边界,那么世界上的许多问题似乎都会得到解决。
最佳答案
这只是语言需要工作的东西,编译器必须实现。显然 my_array
的完整类型是 int[5]
(即大小是 type 的一部分),因此此信息很容易获得。
与流行的看法相反,没有使用免费的std::begin()
/std::end()
函数在游戏中,虽然那些天真地似乎能够做到这一点(但有一个涉及 ADL 的问题会破坏这种方法)。
关于c++ - C++11 基于范围的 for 循环如何知道数组大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13368220/