двойное отрицание по стандарту
От: Antikrot  
Дата: 27.12.04 14:51
Оценка: 1 (1)
Нашел недавно (в исходниках xvid'а) такое выражение:
   mpeg = !!(pParam->vol_flags & XVID_VOL_MPEGQUANT);

Далее это используется как индекс в массиве из двух элементов.
То, что в скобках, имеет значения или 0 или 2^11, и путем такого преобразования превращается в 0 или 1. (все переменные здесь типа int)
Собственно, взяло сомнение, хотя это и работает, но как это будет по стандарту?
Не получится ли так, что компилятор использует не единичку в качестве отрицания нуля, а что-нибудь другое, и мы получим вылет за пределы массива?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.