我知道这个问题被问了很多次,我没有问如何做到这一点,因为我是在编译时这样做的。我的问题是它是如何工作的,因为这是我不明白的。
当将 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);
}
Run Code Online (Sandbox Code Playgroud)
我使用 VC++ 2008、Intel C++ 12 和 GCC 4.7 测试了这段代码,它可以工作。
通过传递字符串本身,编译器将其视为const char[]- 至少我是这么认为 - 并且他能够获取字符串大小,这怎么可能?