Подтвердить что ты не робот

Кастинг в пустоту (не указатель) разрешен, почему?

Почему я могу передать этот вектор в пустоту (даже не указатель)?

int main()
{
   std::vector<int> a;
   (void)a;
}

Как это разрешено?

4b9b3361

Ответ 1

Приведение в действие void просто отменяет результат выражения. Иногда вы увидите, что люди используют это, чтобы избежать предупреждений "неиспользуемая переменная" или "проигнорированное возвращаемое значение".

В С++ вы, вероятно, должны написать static_cast<void>(expr);, а не (void)expr;

Это имеет тот же эффект отбрасывания значения, указывая, какое именно преобразование выполняется.

В стандарте говорится:

Любое выражение может быть явно преобразовано в тип cv void, в котором случай становится выражением отбрасываемого значения (пункт 5). [ Заметка: однако, если значение находится во временном объекте (12.2), деструктор поскольку этот объект не выполняется до обычного времени, а значение объект сохраняется с целью выполнения деструктора. -end note]

ISO/IEC 14882: 2011 5.2.9 пар. 6