Я не совсем понимаю синтаксис ((std::cout << ints << ' '),...)
. Я не вижу перегруженных версий std::basic_ostream::operator<<
, в которых бы содержался пакет параметров шаблона variadi c.
Что именно здесь происходит и как оно работает?
Если я не ошибаюсь, это называется «выражение сгиба» , но вы также можете найти его как «сворачивание шаблона» или просто «сворачивание».
Доступно, начиная с C + + 17.
Идея заключается в применении оператора над пакетом значений c.
Класси c Пример: сумма.
Если вы хотите Сумма вашего ints
, вы можете применить оператор +
следующим образом
( ints + ... );
В вашем случае выражение складывания применяется над оператором запятой.
Итак, если ints...
- это (например) 2, 3, 5, 7
, ваше выражение:
((std::cout << ints << ' '),...);
эквивалентно
(std::cout << 2 << ' '), (std::cout << 3 << ' '), (std::cout << 5 << ' '), (std::cout << 7 << ' ');