如何知道常量数组的大小
How to know the size of a const array?
给定以下代码:
const myStr codesArr[] = {"AA","BB", "CC"};
myStr 是一个包装char*
类。我需要遍历数组中的所有项目,但我不知道项目的数量。我不想定义一个表示大小的const
值(在本例中为 3)
使用以下内容是否安全:
const int size = sizeof(codesArr) / sizeof(myStr);
怎么办?
安全明了的方法是使用 std::extent
(自 C++11 起):
const size_t size = std::extent<decltype(codesArr)>::value;
只要
不将其作为参数传递给函数,就可以使用int size = sizeof(codesArr) / sizeof(myStr);
,因为这样数组将衰减为指针并丢失大小信息。
您还可以使用模板技巧:
template<typename T, int sz>
int size(T(&)[sz])
{
return sz;
}
获取数组大小的最佳方法(pre c++11)在此链接中给出。这是一个复杂的模板技巧,但与其他方法相比具有许多优势,如上面的链接中所述。方法是使用以下宏+函数:
template <typename T, size_t N>
char ( &_ArraySizeHelper( T (&array)[N] ))[N];
#define countof( array ) (sizeof( _ArraySizeHelper( array ) ))
它的优点之一是它纯粹是一个编译时操作,这比在运行时执行要好,并且在 c++11 的 constexpr 之前,是唯一允许您将操作的结果用作另一个数组大小的方法(因为它是一个编译时常量)。
相关文章:
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 我怎么知道数组包含多少个元素C++?
- 如果我知道只会使用现有元素,我可以在数组开头之前传递指针吗?
- 尝试通过多个函数移动数组,但遇到了我不知道如何修复的错误
- 如何在不知道大小的情况下读取文本文件并存储到数组中
- 我不知道如何设计函数以使用动态数组
- 如果元素的数量已经知道,检查数组或向量中的所有元素是否相等更好?
- 如何在不知道Arduino中知道其大小的情况下创建数组和存储值
- 如何在不知道尺寸的情况下在 2D 数组中输入
- 如何知道我想在数组中存储多少索引
- 从字节数组加载 QImage,而无需知道格式
- 由于删除 [] 知道数组大小,为什么此信息不可用
- C 初始化数组成员,其长度在编译时由构造函数知道
- C++如果我不知道数组大小并且需要接收数组怎么办
- 我可以在不知道文本文件的列数的情况下读取二维数组中的文件吗?
- 如何在不知道大小的情况下编写过程来修改动态数组的元素和大小
- 我怎么知道基类对象的指针数组中元素的类型,它将为派生类分配内存
- 尝试创建一个2D数组,其大小仅在C 中的运行时才知道
- 如何在不知道数组大小的情况下声明数组?C++
- 如何知道常量数组的大小