2016-08-29 3 views
2

새로운 C++ 17 배 표현을 배우고 있으며 c++17 fold expression에서이 코드를 보았습니다. 내가 알고 싶은 이유 코드가 작동 :CUT에서 17 배의 C++ 표현

template<typename ...Args> 
void printer(Args&&... args) { 
    (std::cout << ... << args) << '\n'; 
} 

하지만이 하나 있었다 너무 논리를 보인다 내 의견에 인쇄 순서를 반대로 것

template<typename ...Args> 
void printer(Args&&... args) { 
    (std::cout << args << ...) << '\n'; 
} 

.

+0

'std :: cout << ... << args'는 (4)'init op ... op pack'과 일치합니다. 'std :: cout << args << ...'는 유효한 형식과 일치하지 않습니다. – Michael

+0

사람들이 왜이 양식을 만들지 않기로 결정한 이유는 무엇입니까? 그렇다면 우리는 어떻게 매개 변수를 역으로 얻을 수 있습니까? –

+0

"* 어떻게하면 역순으로 매개 변수를 얻을 수 있습니까? *"역순으로 작성해야하는 경우가 있습니다. 작성하기가 매우 어려울 것입니다. 일반 팩 확장에서는 팩을 역순으로 확장 할 수 없습니다. –

답변

7

cppreference에 나타난 바와 같이, 진 주름은 다음과 같은 두 가지 형태를 가질 수

Screenshot from cppreference/fold

E팩 표현하고 I초기화 표현입니다.


(I op E op ...)의 형태를 가지고 당신의 (std::cout << args << ...)과 일치 더 진 배 없다.