는 ++ 난 단지 배열에 대한 읽기 전용 액세스를 필요로하지만, 실수로 const가 아닌 포인터 수신으로 선언하는 기능이 있습니다const 개체에 대한 읽기 전용 액세스를 위해 const_cast를 사용하고 있습니까? C에서
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;
}
을하고 난 const를 배열을 호출해야합니다 :
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