اول چند نکته رو در نظر میگیریم
نکته ۱: نوع یک آرایه، ارجاعی از ۱) یک نوع دادهی خاص به ۲) خانهی اول به همراه ۳) تعداد خانههای مورد ارجاع است. برای مثال آرایهی زیر رو ببینید
int x[] = {'a', 'b', 'c'};
نوع x چیست؟ ارجاعی از نوع کاراکتر به خانهی &x[0] با تعداد 3 عضو.
اگه بخوایم به زبان C++ این مطلب رو بیان کنیم نوع x مساوی char(&)[3] هست. char برای نوعدادهی مورد استفاده در آرایه، & برای ارجاع و 3 برای تعدا خانههای مورد استفاده.
نکته ۲: تعداد اعضای مورد استفاده (تعداد خانهها) با int شمرده نمیشه. بلکه با یه نوع دادهی خاص شمرده میشه به نام size_t. برای توضیح بیشتر این سوال و ببینید:
تعریف size_t
یعنی یک آرایه یک نوع به شکل type(&)[size_t] هست. بنابراین با داشتن یه آرایه از یک نوع خاص باید بتونیم اندازهش رو داشته باشیم. یعنی همون تابع مورد سوال
<typename T, size_t n>
size_t array_size(const T (&)[n])
{
return n;
}
که میگه برای یه آرایه از نوع T و اندازهی n، همون n رو برگردونه. که درسته.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)