C++一元右折与一元左折与逗号运算符

tow*_*120 4 c++ fold-expression c++17

为什么逗号分隔的一元左折产生与右一折相同的结果?

实时代码

template<class ...Args>
void right_fold(Args... args){
    ((std::cout << args),...);
}

template<class ...Args>
void left_fold(Args... args){
    (...,(std::cout << args));
}

int main()
{
    right_fold(1,2,3,4);
    std::cout << std::endl;
    left_fold(1,2,3,4);
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

1234
1234
Run Code Online (Sandbox Code Playgroud)

不应该是:

4321
1234
Run Code Online (Sandbox Code Playgroud)

小智 9

左右VS折叠之间的区别((a,b),c)(a,(b,c)),但他们拥有完全相同的效果当内置,运营商使用:他们第一次评估a,然后b最后c.要查看差异,您需要使用具有自定义重载,运算符的类型.

语法可能看起来好像会反转参数,但不会,这种情况不会发生.

  • @ tower120 [用逗号分隔的一对表达式从左到右进行评估;](http://eel.is/c++draft/expr.comma#1.sentence-2). (3认同)
  • @ tower120完全正确.有一些运营商强制进行从左到右的评估,这些都在标准中特别提到.从C++ 17开始,有一些运算符强制从右到左的评估,这些也在标准中被称为.对于其他运营商,订单完全取决于实施. (2认同)