Кастинг в пустоту (не указатель) разрешен, почему?
Почему я могу передать этот вектор в пустоту (даже не указатель)?
int main()
{
std::vector<int> a;
(void)a;
}
Как это разрешено?
Ответ 1
Приведение в действие void просто отменяет результат выражения. Иногда вы увидите, что люди используют это, чтобы избежать предупреждений "неиспользуемая переменная" или "проигнорированное возвращаемое значение".
В С++ вы, вероятно, должны написать static_cast<void>(expr);, а не (void)expr;
Это имеет тот же эффект отбрасывания значения, указывая, какое именно преобразование выполняется.
В стандарте говорится:
Любое выражение может быть явно преобразовано в тип cv void, в котором случай становится выражением отбрасываемого значения (пункт 5). [ Заметка: однако, если значение находится во временном объекте (12.2), деструктор поскольку этот объект не выполняется до обычного времени, а значение объект сохраняется с целью выполнения деструктора. -end note]