ArraySizeHelper
- это шаблон функции, который возвращает массив char
размером Size
.Шаблон принимает два параметра: один тип (который Type
), а другой значение (который Size
).
Поэтому, когда вы передаете объект типа, скажем, A[100]
функции.Компилятор выводит оба аргумента шаблона: Type
становится A
, а Size
становится 100
.
Таким образом, тип возвращаемого экземпляра функции становится char[100]
.Поскольку аргумент sizeof
никогда не вычисляется, поэтому функции не нужно иметь definition .sizeof
нужно знать только тип возврата функции, которая равна char[100]
.Это становится эквивалентным sizeof(char[100])
, который возвращает 100 - размер массива.
Еще один интересный момент, который следует отметить, заключается в том, что sizeof(char)
не зависит от компилятора, в отличие от других примитивных типов (кроме вариантов символ 1 ).Его ВСЕГДА 1
.Так что sizeof(char[100])
гарантированно будет 100
.
1.Размер всех вариантов char
- ОДИН, будь то char
, signed char
, unsigned char
в соответствии со Стандартом.