【问题标题】:size_t template parameter in std::arraystd::array 中的 size_t 模板参数
【发布时间】:2020-08-04 17:36:14
【问题描述】:

std::array 模板参数是template < class T, size_t N > class array;,其中 N 代表数组中元素的数量。

我的疑问是为什么类型是std::size_t? std::size_t 不是对象/指针大小(以字节为单位)的别名。 std::size_t

这里为什么用std::array中的元素个数来表示?

【问题讨论】:

  • 它也是标准库中几乎所有容器和算法的默认大小和索引类型。值得注意的例外是表示元素之间的距离,其中值可以是负数。
  • 请注意,术语“对象”在 C++ 中有点重载。当然,你有 OOP 术语,但在 C++ just about everything is an object 中。从字面上看,列出什么不是对象比列出什么更容易。
  • 对不起,我是新用户,感谢您指出大卫,我已经进行了更改

标签: c++ stdarray size-t


【解决方案1】:

std::size_t 类型定义为数字类型,可以表示最大可能对象的大小(例如,N 个字节)。

最大的对象可能是一个数组,因此具有最多可能对象的数组是一个 N chars 的数组。

所以,std::size_t makes sense for array indexes and dimensions too

你应该尽可能地遵守这个约定,否则你可能会引入错误:

std::size_t 通常用于数组索引和循环计数。使用其他类型(例如unsigned int)进行数组索引的程序可能会失败,例如索引超过 UINT_MAX 或依赖于 32 位模运算 (cppref) 时的 64 位系统

我们本可以使用std::index_t,但它与std::size_t 相同,所以这毫无意义。

【讨论】:

    猜你喜欢
    • 2014-03-11
    • 2015-05-19
    • 1970-01-01
    • 2023-03-10
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多