给定以下代码:
const myStr codesArr[] = {"AA","BB", "CC"};
myStr是一个封装了char*
的类。
我需要循环遍历数组中的所有项,但我不知道有多少项。
我不想定义一个代表大小(在此情况下为3)的const
值。
使用类似以下代码是否安全:
const int size = sizeof(codesArr) / sizeof(myStr);
该怎么办?
只要你不将其作为参数传递给函数,就可以使用int size = sizeof(codesArr) / sizeof(myStr);
,因为数组会衰减为指针并且失去大小信息。
你也可以使用模板技巧:
template<typename T, int sz>
int size(T(&)[sz])
{
return sz;
}
size()
函数应该在 C++11 中使用 constexpr
,或者在 C++03 中使用宏技术,以便它可以用作常量表达式。 - Nawazsize_t
? - Jens Gustedtsize_t
更合适。 - Luchian Grigore在 C++11 之前获取数组大小的最佳方式可以在this link找到。这是一个复杂的模板技巧,但与其他方法相比具有许多优势,如上面链接中所讨论的。该方法是使用以下宏+函数:
template <typename T, size_t N>
char ( &_ArraySizeHelper( T (&array)[N] ))[N];
#define countof( array ) (sizeof( _ArraySizeHelper( array ) ))
std::array
(如果您的编译器不是C++11,则使用std::tr1::array
)而不是内置数组。并且很可能使用std::string
而不是myStr
所做的任何事情。 - Grizzlysizeof(codesArr) / sizeof(codesArr[0]);
,但需要遵守 Luchian Grigore 提到的限制。 - Some programmer dude