This code shows two ways to calculate size of array of any type. I would like to know, which should be preferred? Is there any advantage/disadvantage?
#include <iostream>
// First method
template<typename Arr>
std::size_t array_size_1(const Arr& arr)
{
return sizeof(arr)/sizeof(arr[0]);
}
// Second method
template<typename T, std::size_t sz>
std::size_t array_size_2(const T (&arr)[sz])
{
return sz;
}
int main() {
int arr[] = {1,2,3,4,5};
std::string sarr[] = {"abc", "def", "ghj"};
std::cout << array_size_1(arr) << "\n";
std::cout << array_size_2(sarr) << "\n";
return 0;
}