C++ 17:"折叠"概念中"具有优先权的运算符"是什么意思?

Hin*_*sum 6 casting operator-precedence fold operator-keyword c++17

http://en.cppreference.com/w/cpp/language/fold的网站举例说明了如何使用折叠概念,它说:

Note
If the expression used as init or as pack has an operator with precedence    
below cast at the top level, it can be parenthesed:

template<typename ...Args>
int sum(Args&&... args) {
//    return (args + ... + 1 * 2); // Error: operator with precedence below cast
    return (args + ... + (1 * 2)); // OK
}
Run Code Online (Sandbox Code Playgroud)

作为一个非英语母语的人,我不退出这句话:

has an operator with precedence below cast at the top level
Run Code Online (Sandbox Code Playgroud)

它实际意味着什么,它的例子,它表明了什么?你能帮忙解释一下吗?

非常感谢.

Nic*_*las 7

转换operator((Typename)expr)在C++的运算符优先级规则中具有非常高的优先.很少有运营商具有更高的优先级.具有强制级别或更高优先级的操作符是非常特殊的操作,通常应用于单个表达式.

在表达式中args + ... + 1 * 2,...适用于左侧和右侧的所有内容.但"右翼"究竟意味着什么呢?它只是意味着+ 1部分,还是意味着+ 1 * 2什么?

对于具有高优先级的运算符,很明显意图是什么.例如,args + ... + func()很明显()函数调用运算符适用于func而不适用于args + ... + func.如果你做了((args + ... + func)()),那么你很可能不希望后者强制你明确地使用括号.

然而,对于图表中优先级低于3的情况,人们理解的事情会变得多云.因此,C++不是使用常规优先级规则,而是强制用户明确它.你可以拥有args + ... + (1 * 2)(args + ... + 1) * 2.但你必须清楚你想要哪一个.