如何知道const数组的大小?

Dar*_*dar 13 c c++ arrays sizeof

给出以下代码:

const myStr codesArr[] =  {"AA","BB", "CC"};     
Run Code Online (Sandbox Code Playgroud)

myStr是一个包装类char*.我需要遍历数组中的所有项目,但我不知道项目的数量.我不想定义一个const代表大小的值(在本例中为3)

使用类似的东西是否安全:

const int size = sizeof(codesArr) / sizeof(myStr);
Run Code Online (Sandbox Code Playgroud)

该怎么办?

eca*_*mur 31

安全而明确的方法是使用std::extent(从C++ 11开始):

const size_t size = std::extent<decltype(codesArr)>::value;
Run Code Online (Sandbox Code Playgroud)


Luc*_*ore 19

您可以使用int size = sizeof(codesArr) / sizeof(myStr);,只要您不将它作为参数传递给函数,因为这样数组将衰减为指针并丢失大小信息.

您还可以使用模板技巧:

template<typename T, int sz>
int size(T(&)[sz])
{
    return sz;
}
Run Code Online (Sandbox Code Playgroud)