【发布时间】:2018-03-23 16:11:36
【问题描述】:
在定义 C 样式数组或 C++11 数组时,通常需要获取一个编译时常量来表示此类数组的大小。在 C 中,使用宏来做这样的事情而不依赖于可变长度数组(因为它在 C99 中不是标准的):
#define ARRAY_SIZE 1024
int some_array[ARRAY_SIZE];
或
#define countof(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0]))
在 C++ 中,是否可以定义更惯用的东西?
【问题讨论】:
-
为什么不直接使用
std::array<int, ARRAY_SIZE>?std::array::size已经是constexpr -
@CoryKramer 它不适用于 C 样式数组,仅此而已。见下文如何定义一个
constexpr countof,它接受 C 风格的数组、C++11 数组和元组。 -
你可以迁移到
std::vector:std::vector<int> some_array(ARRAY_SIZE);。然后使用some_array.size()。 -
@ThomasMatthews
std::vector是std::vector,std::array和 C 风格的数组是别的东西。 -
std::vector的一个优点是您不需要将容量传递给函数。使用数组,您将传递数组的起始地址和容量。是的,我知道其中的区别。