我知道这个问题被问了很多次,我不是在问怎么做,因为我是在编译时这样做的。我的问题是它是如何工作的,因为那是我不明白的。
当将 a 传递char[]
给函数时,它会丢失其信息并变成char*
,因此我们无法在编译时使用模板获取字符数组的大小,所以我尝试并传递了字符串本身并且它起作用了:
template <int N> inline int arr_len(const char (&)[N]) { return N - 1; }
#define STR "this is an example!"
const char *str_ptr = STR;
int main()
{
int array_size = arr_len(STR);
}
我用 VC++ 2008、Intel C++ 12 和 GCC 4.7 测试了这段代码,它可以工作。
通过传递字符串本身,编译器将其视为const char[]
-至少我认为是这样-并且他能够获得字符串大小,这怎么可能?