c++ - C++11 基于范围的 for 循环如何知道数组大小?

标签 c++ for-loop c++11

当我做这样的事情时:

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/

相关文章:

c++ - 使用 QPainter 绘制的 QML 类型

c++ - 如何使用 OpenGL 处理纹理压缩和 mipmap 生成?

c - 我想知道当 if(i%2) 它检查什么来继续时会发生什么。它错过了 == 但它打印出的总和为 20?为什么?

c++ - QAbstractButton 的 SIGNAL SLOT 新符号的问题

使用 lambda 的 c++11 排序列表

c++ - 从 C++ 文件中读取不同类型的数字数据

c++ - 怎么了? undefined reference ?

c# - 你推荐 Native C++ 到 C++\CLI 的转变吗?

python - 以更好的模式重写我的简单 Python 代码

javascript - 如何找到数组中元素与集合数组 node.js 的最佳匹配