Обьясните код подсчета количества символов строки

В чужом проекте я наткнулся на следующий код

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");

компилятор выводит Tconst char, а N — 6.

→ Ссылка