++私は唯一の配列への読み取り専用アクセスが必要ですが、誤って非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 ::回数(配列、配列+はsizeof(配列)/はsizeof(配列[0])、0);' – MP24
MP24 @この関数は、だけの簡単な図であります問題。 – sharptooth