std::array 的大小是否由标准强制执行?
在 C 11 中,std::array 保证具有连续性存储和性能超越或等于常规阵列。然而,问题仍然存在:标准是否明确定义了 std::array 的大小和内存布局?
探索标准的要求
标准定义了 std:: array 作为一个聚合,可以使用语法初始化:
std::array<T, N> a = { initializer-list };
作为一个聚合,std::array 不能使用构造函数来转换来自初始化列表的数据。这意味着数组主要存储值本身。
与预期行为的可能偏差
技术上,该标准并不禁止某些潜在偏差:
编译器变体
尽管标准含糊不清,但在 GNU 和 Intel 等主要编译器中的实际使用表明 std::array 的大小和内存布局镜像了常规数组的大小和内存布局。
std::vector< std::array<int, N> > x(M); typedef int (*ArrayPointer)[N]; ArrayPointer y = (ArrayPointer) &x[0][0]; // Safe multidimensional array-like usage
它是值得注意的是,虽然此代码按预期运行,但并不能保证所有实现都遵循此模式。因此,在关键任务代码中依赖这种行为是不可取的。
以上是C 标准是否保证'std::array”的大小和内存布局?的详细内容。更多信息请关注PHP中文网其他相关文章!