【问题标题】:C style array with C++? [duplicate]使用 C++ 的 C 样式数组? [复制]
【发布时间】:2020-01-23 11:19:54
【问题描述】:

我在 stackoverflow 和 codereview 上阅读了很多答案,这些答案说我们不应该在 C++ 中使用 C 样式数组。它的原因是什么? 如果我使用 std::Array 而不是 C 风格的数组,它会影响速度/性能吗?

在我的组织中,整个应用程序都是用 C++ 编写的。但是只使用了 C 风格的数组。

【问题讨论】:

  • 理论上,在 C 风格的数组上使用 std::array 不会受到任何惩罚,实际上我也对此表示怀疑(只要你不通过数组 按值 , std::array 是可能的,但对于 C 样式的数组是不可能的)。
  • 很高兴看到我的金色“阵列”徽章得到了一些使用??
  • @Someprogrammerdude 在 C 语言中,我可以在运行时创建可变长度数组,例如 int arr[n]。 std::array 可以吗?
  • @KamalPancholi VLA 在标准 C++ 中是不允许的。
  • @KamalPancholi 为此你有std::vector

标签: c++ c arrays


【解决方案1】:

不,它不会对性能产生影响。使用 std::array 代替 C 类数组有两个原因:

  • 方法 at() 允许通过边界检查通过索引获取元素。请注意,运算符 [] 没有边界检查。
  • 有限的指针运算。与类似 C 的阵列相比,在脚上射击要困难得多。
  • 与其他 std 容器的行为相同,例如 begin()、end()、size() 方法,无需处理两个变量:指针和大小。因此,您可以实现一种适用于数组和其他容器的算法。

感谢 Thomas Sablik 在 cmets 中的澄清。

【讨论】:

  • @ThomasSablik 是的,但是简单的 C 样式数组的问题是它们经常衰减为指针,然后 std::begin()std::end() 就不能很好地工作了。
猜你喜欢
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2015-01-27
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 2018-11-02
相关资源
最近更新 更多