template <typename type>
bool is_array(type const &var) {
std::cout << sizeof(var) << " " << sizeof(type);
return sizeof(var) > sizeof(type);
}
int main() {
int a[10], b;
is_array(a);
return 0;
}
Подскажите, пожалуйста, почему вышеуказанный код показывает, что
sizeof(var) == sizeof(type) == 40
как я могу получить тип переменного? Чтоб получилось так
sizeof(var) == 40
sizeof(type) == 4
"Вышеуказанный код" показывает, что sizeof(var) == sizeof(type) потому, что это так и есть. Это скорее у вас нужно спрашивать, почему вы ожидали иного результата.
Если тип T - массив, то тип элемента этого массива вы можете получить через std::remove_extent<T>::type или std::remove_all_extents<T>::type, в зависимости от того, что именно вам нужно
template <typename type>
bool is_array(type const &var)
{
using element = typename std::remove_all_extents<type>::type;
std::cout << sizeof(type) << " " << sizeof(element) << std::endl;
return sizeof(type) > sizeof(element);
}
int main()
{
int a[10];
is_array(a);
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости