ARRAYSIZE Макрос C ++: как он работает?

Хорошо, я не полностью новичок, но я не могу сказать, что понимаю следующий макрос. Самая запутанная часть - это разделение со значением, приведенным к size_t: что, черт возьми, это дает? Тем более, что я вижу оператор отрицания, который, насколько мне известно, может привести к нулевому значению. Не означает ли это, что это может привести к ошибке деления на ноль? (Между прочим, макрос правильный и прекрасно работает.)

#define ARRAYSIZE(a) \
  ((sizeof(a) / sizeof(*(a))) / \
  static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))
15
задан a3f 31 March 2015 в 02:15
поделиться