ARRAYSIZE C ++ макрос: как это работает?

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

#define ARRAYSIZE(a) \
  ((sizeof(a) / sizeof(*(a))) / \
  static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))

Ответы на вопрос(7)

Ваш ответ на вопрос