Я изучаю новое c ++ 17-кратное выражение, и я видел этот код из c ++ 17 кратное выражение. Я хотел бы знать, почему этот код работает:
template<typename ...Args>
void printer(Args&&... args) {
(std::cout << ... << args) << '\n';
}
но не этот
template<typename ...Args>
void printer(Args&&... args) {
(std::cout << args << ...) << '\n';
}
что может показаться логичным, и, на мой взгляд, поменять порядок печати.
Как видно на cppreference, бинарные складки могут иметь следующие две формы:
куда E
это выражение пакета а также I
это выражение инициализации.
Там нет бинарной складки, которая соответствует вашему (std::cout << args << ...)
, который имеет форму (I op E op ...)
,
Других решений пока нет …