4
以下行如何展开?折叠逗号如何工作?
template <class... Ts>
void print_all(std::ostream& os, Ts const&... args) {
(void(os << args), ...);
}
应用所述规则,
一元右倍(E OP ...)为E 1个运算(OP ...(E N-1运算ËÑ ))
由cppreference提供,
E = void(os << args)
op = ,
则扩展成为
void(os << args[0], ..., (args[N-3], (args[N-2], args[N-1])))
?
如何
v.push_back(args), ...
是否成为
v.push_back(args[0], (args[1], ..., (args[N-2], args[N-1])))
两膨胀和括号是混乱。有人会解释吗?
需要注意的是二进制左折叠也将保证评价的顺序所有这些'<<'表达式。而逗号的折叠不会。 –
为什么? [在逗号表达式E1,E2中,评估表达式E1,其结果被丢弃(尽管它具有类类型,直到包含完整表达式结束时才会被销毁),并且其副作用在评估表达式E2开始](http://en.cppreference.com/w/cpp/language/operator_other#Built-in_comma_operator),所以在我看来“折叠(内置)逗号”确实保持顺序的评估。 –
@NicolBolas不是吗? http://eel.is/c++draft/expr.comma#1.sentence-3 – Barry