const T(&)[N]作为参数,传递的参数能够保留原有数组的长度信息。例子如下:
struct pj_str_t
{
/** Buffer pointer, which is by convention NOT null terminated. */
char *ptr;
/** The length of the string. */
int slen;
};
struct pj_int_t
{
/** Buffer pointer, which is by convention NOT null terminated. */
int *ptr;
/** The length of the string. */
int slen;
};
template<typename T, int N>
constexpr const pj_str_t CONST_PJ_STR(T (&a)[N]) noexcept {
return {const_cast<char*>(a), N-1};
}
template<typename T, int N>
constexpr const pj_int_t CONST_PJ_INT(T (&a)[N]) noexcept {
return {const_cast<int*>(a), N};
}
int main()
{
pj_str_t str=CONST_PJ_STR("hello world");;
int a[]={1,2,3};
pj_int_t array=CONST_PJ_INT(a);
printf("int size %d,%p\n",array.slen,&array.ptr[1]);
printf("%p\n",&a[1]);
}
具体解释可以参考
这里