Обьясните код подсчета количества символов строки
В чужом проекте я наткнулся на следующий код
template<typename T, size_t N>
{
size_t SizeSTR(const T(&)[])
{
return N;
}
}
Данный код считает длинну строки. Но я не совсем понимаю как?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Вы несколько неверно записали функцию. Вот так правильнее:
template<typename T, size_t N>
size_t SizeSTR(const T(&)[N])
{
return N;
}
И это не длина строки, а размер переданного массива. Когда вы передаете в SizeSTR массив, то компилятор сразу видит тип и размер этого массива, и инстанцирует шаблонную функцию для соответствующего типа и размера. Ну, и которая, соответственно, возвращает вычисленный компилятором размер.
Например,
int a[8];
SizeSTR(a);
Компилятор понимает, что T - это int, а N - это 8. Так что ваша функция возвращает 8.
Точно так же при передаче строкового литерала
SizeSTR("Hello");
компилятор выводит T — const char, а N — 6.