En C++ que tienen una función que sólo requiere acceso de sólo lectura a una matriz, pero se declaró erróneamente como recibir un puntero no constante:¿Está permitido utilizar const_cast para el acceso de solo lectura a un objeto 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;
}
y necesito llamarlo para una matriz const:
static const int Array[] = { 10, 20, 0, 2};
countZeroes(const_cast<int*>(Array), sizeof(Array)/sizeof(Array[0]));
será este comportamiento indefinido? Si es así, ¿cuándo se ejecutará el programa en UB? ¿Cuándo se realiza el const_cast y se llama a la función o cuando se accede a la matriz?
Supongo que no puede cambiar la declaración de la función ... pero le recomiendo encarecidamente que escriba una envoltura con una mejor y haga el trabajo sucio dentro de ella. –
quizás tratar una cosa totalmente diferente: 'size_t numZeros = std :: count (Array, Array + sizeof (Array)/sizeof (Array [0]), 0);' – MP24
@ MP24 Esta función es sólo una simple ilustración de un problema. – sharptooth