#cpp #шаблоны_с++
Функция foo() считает кол-во элементов массива. В случае с типом "char" все работает правильно,а "int" - нет. Код: #include "pch.h" #includeusing namespace std; template int foo(T *a) { int i = 0; while (*a++) { i++; } return i + 1; } int main() { char ch[] = "hellohowareu"; int ii[] = { 1,2,3,4,5 }; cout << foo(ch) << endl; cout << foo(ii) << endl; return 0; } з.ы. Функция списана из книжки Страуструпа,только "модернизировал" и добавил шаблон.
Ответы
Ответ 1
Смотрите: она считает while (*a++) количество элементов массива до первого нулевого. При инициализации массива символов строковым литералом в массив добавляется завершающий нулевой символ. В массиве int этого не делается, так что ваша функция выходит за пределы массива и идет дальше, пока не найдет ноль. Или пока не произойдет что-то неприятное :) - выход за границы массива - это UB, так что произойти может что угодно... Если очень хочется именно через свой шаблон - то вот вариант: templatesize_t foo(const T(&)[N]) { return N; } Но в C++17 такой шаблон уже есть, называется size. Ответ 2
cout << std::distance(std::begin(ii), std::end(ii));
Комментариев нет:
Отправить комментарий