【发布时间】:2014-03-25 17:12:41
【问题描述】:
我正在用 C++ 开发一个库,以便帮助开发人员完成某些任务。 通常,为了以动态方式(不使用#define SIZE 或静态 int SIZE)计算整数数组的大小(例如),我会使用 sizeof(v) / sizeof(int)。我正在尝试编写一段可以自动为我做这些事情的代码,我决定调用 if lengthof。 代码在这里:
template <class T> int _typesize(T*) { return sizeof(T); }
#define lengthof(x) (sizeof(x) / _typesize(&x))
我使用模板获取数组的类型,然后以字节为单位返回其大小。在 GCC 中,我知道可以使用 typeof,因此我可以将 _typesize(&x) 替换为 sizeof(typeof(x)),但在 MSVC 上是不可能的。 _typesize 是一种兼容的方式,但我认为它可能很昂贵,因为它将指针作为副本传递。有一种优雅的方法可以做到这一点?
【问题讨论】:
-
std::vector或std::array -
使用来自stackoverflow.com/a/14713274/459640的
ArraySizeHelper函数和arraysize宏 -
通过副本传递指针几乎没有昂贵的操作...
-
对于不使用太多内存的局部变量,我通常使用 C 样式的数组(由于堆栈与堆等)