T[N]和std::array<T,N>之间的区别

3

我的问题非常直接,更具体地说,我想从Stroustrup11中引用两行:

  1. T[N] 一个固定大小的内置数组:N个连续的T类型元素;没有size()或其他成员函数
  2. array<T,N> 一个固定大小的数组,由N个T类型的连续元素组成;类似于内置数组,但大多数问题都已解决

那么作者提到的区别是什么呢? std::array<T,N> 解决了哪些问题?


仅复制,不会腐败为T*,... - Jarod42
2个回答

5
主要的区别在于,std::array<T, N>不会衰变为指向第一个元素的指针,而T[N]会。此外,你可以对std::array<T, N>进行值复制,这是T[N]所没有的。 std::array还提供了一些有用的函数,例如字典序比较运算符。
但是由于N必须是可编译时求值的常量表达式,因此std::vector<T>通常是首选。

关于这个话题的SO讨论:https://dev59.com/F2855IYBdhLWcg3wSiU7。 - YesThatIsMyName
@Quentin:哎呀,这只老猫真是太傻了。 - Bathsheba
1
但是关系运算符也是可用的 <, >, <=, =>, ==, != - Jarod42

2
与内置数组不同,std::array对象可以复制并作为函数参数传递。
重载运算符和成员函数可以提供额外的调试和运行时检查,并消除大量代码重复。一组标准成员简化了在通用代码中使用std::array对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接