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
}

作为非英语母语者,我不会放弃这句话:

has an operator with precedence below cast at the top level

它实际上是什么意思,并且在示例中,它表示什么?你能帮忙解释一下吗?

非常感谢。

尼科尔·波拉斯(Nicol Bolas)

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

在表达式中args + ... + 1 * 2...应用于左右两边的所有内容。但是“在右边”的真正含义是什么?它仅意味着+ 1一部分,还是意味着+ 1 * 2

对于具有较高优先级的运算符,其意图很明显。例如,args + ... + func()很明显,()函数调用运算符适用于func而不适用args + ... + func您不太可能希望后者,如果您这样做((args + ... + func)(),则被迫显式使用括号

但是,对于图表中低于3的优先级水平,事情变得更加让人难以理解。因此,C ++强制用户明确使用此优先级规则,而不是使用常规优先级规则。您可以拥有args + ... + (1 * 2)(args + ... + 1) * 2但是您必须清楚要哪个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

这个“ >> =”运算符在C中是什么意思?

来自分类Dev

C#中的“ <<”运算符是什么意思

来自分类Dev

C#预处理程序指令中运算符的优先级是什么?

来自分类Dev

在C ++中重载运算符时,“ const”是什么意思

来自分类Dev

:: *(作用域运算符后的星号)在C ++模板中是什么意思?

来自分类Dev

代码执行的结果是什么?C 运算符优先级

来自分类Dev

C中的移位运算符优先级

来自分类Dev

c中运算符的优先级

来自分类Dev

C中运算符优先级的奇怪结果

来自分类Dev

C ++中的运算符优先级

来自分类Dev

C中的短路和运算符优先级

来自分类Dev

C ++:Stroustrup示例中的运算符优先级

来自分类Dev

C运算符中的优先级==和(=)

来自分类Dev

c中运算符的优先级

来自分类Dev

输出流中的C ++运算符优先级

来自分类Dev

C解释中的运算符优先级

来自分类Dev

C 中的优先级运算符

来自分类Dev

C中的运算符优先级?

来自分类Dev

C中'or'和'and'运算符的优先级

来自分类Dev

比较运算符重载与转换运算符的C ++优先级

来自分类Dev

C ++类上使用的一元运算符是什么意思?(类::类)

来自分类Dev

C++ 字符串的运算符“斜杠”是什么意思?

来自分类Dev

转换函数以确定运算符优先级从C#到C ++

来自分类Dev

C ++与C#运算符优先级

来自分类Dev

在C中进行类型转换时的运算符优先级

来自分类Dev

为什么 c++ && 运算符需要优先级

来自分类Dev

C ++运算符优先级和return语句

来自分类Dev

C ++ std :: cout和<<运算符,优先级

来自分类Dev

C ++逗号运算符的优先级