Is using const_cast for read-only access to a const object allowed?

c++, casting, const-cast, constants, undefined-behavior

Solution

Yes, it is allowed (if dangerous!). It's the actual write to a `const` object that incurs undefined behaviour, not the cast itself (7.1.5.1/4 [dcl.type.cv]).

As the standard notes in 5.2.11/7 [expr.const.cast], depending on the type of the object an attempt to write through a pointer that is the result of casting away `const` may produce undefined behaviour.

Problem

In C++ I have a function that only requires read-only access to an array but is mistakenly declared as receiving a non-const pointer: ``` 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; } ``` and I need to call it for a const array: ``` static const int Array[] = { 10, 20, 0, 2}; countZeroes( const_cast<int*>( Array ), sizeof( Array ) / sizeof( Array[0] ) ); ``` will this be undefined behaviour? If so - when will the program run into UB - when doing the const_cast and calling the functon or when accessing the array?

Original source

Related problems