В C++ У меня есть функция, которая требует только доступ только для чтения к массиву, но ошибочно объявлен как получающий неконстантную указатель:Использует const_cast для доступа только для чтения к объекту const?
size_t countZeroes(int* array, size_t count)
{
size_t result = 0;
for(size_t i = 0; i < count; i++) {
if(array[i] == 0) {
++result;
}
}
return result;
}
и мне нужно вызвать его константный массив:
static const int Array[] = { 10, 20, 0, 2};
countZeroes(const_cast<int*>(Array), sizeof(Array)/sizeof(Array[0]));
будет ли это неопределенным поведением? Если это так - когда программа запустится в UB - при выполнении const_cast и вызове functon или при доступе к массиву?
Я полагаю, вы не можете изменить объявление функции ... но я настоятельно рекомендую вам написать обертку с лучшей и сделать грязную работу внутри нее. –
Возможно, попробуйте совсем другое: 'size_t numZeros = std :: count (Array, Array + sizeof (Array)/sizeof (Array [0]), 0);' – MP24
@ MP24 Эта функция представляет собой просто иллюстрацию проблема. – sharptooth