C++, свойста шаблонов, работа с памятью

109
03 ноября 2021, 05:40
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
Answer 1

"Вышеуказанный код" показывает, что 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);
}
READ ALSO
Программа не работает при смене функций местами

Программа не работает при смене функций местами

Почему-то программа крашится на scanf'е, выдаёт ошибку malloc_consolidate() invalid chunk sizeНо если я поставлю функцию game_logic () в main после остальных, то всё будет...

251
Задача на проверку последовательности

Задача на проверку последовательности

Я не могу понять что не так с кодом, можете помочь дописать его

96
Конвертирование типов long to int*

Конвертирование типов long to int*

Вопрос нубский, потому что питонистИмеется функция в хедере через extern C

242
Не работает вывод в файл в Visual studio 2019

Не работает вывод в файл в Visual studio 2019

Я пробовал запускать в visual 2019 но он не выводит в файл, я попробовал запустить в visual 2010 и dev cpp но там выводились цифры которые не как не относятся...

224