#c
Вопрос:
Я читал о сворачивании выражений и нашел пример того, что использовалось до сворачивания выражений:
template lt;class... Tsgt; void print_all(std::ostreamamp; os, Ts constamp;... args) { using expander = int[]; (void)expander{0, (void(os lt;lt; args), 0)... }; }
Проблема void(os lt;lt; args)
в том, что немного. Что означает пустота в этом контексте? Я уже пытался найти это, но это довольно общий подход.
Спасибо, что уделили мне время.
Комментарии:
1. С выражениями сгиба вам больше не нужен этот трюк.
Ответ №1:
Он приводит результат (os lt;lt; args)
к void
. Это оно.
Этот стиль используется для предотвращения очень редкой перегрузки ,
оператора (запятой), поскольку теоретически lt;lt;
он может быть перегружен для определяемого пользователем args
аргумента и возвращать то, что перегружало оператор запятой для X, 0
выражения. Это может нарушить трюк с инициализацией. Таким образом, код безопасен, и запятая всегда используется в качестве обычного оператора последовательности.