ARRAYSIZE C ++ макрос: как это работает?
Хорошо я неполностью новичок, но я не могу сказать, что понимаю следующий макрос. Самая запутанная часть - это разделение со значением, приведенным к size_t: что на самом деле это делает? Особенно, поскольку я вижу оператор отрицания, который, насколько я знаю, может привести к нулевому значению. Не означает ли это, что это может привести к ошибке деления на ноль? (Кстати, макросявляется правильно и прекрасно работает.)
#define ARRAYSIZE(a) \
((sizeof(a) / sizeof(*(a))) / \
static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))