c++ - 令人困惑的运算符优先级 : a << b + c << d

标签 c++ operator-precedence

接线员 +优先级高于 <<在 C++ 中,这意味着表达式 a << b + c << d应评估为:

a << (b + c) << d

但这没有意义。跟随可以获得更多意义

a << (b + (c << d))

但这违反了 + 的优先级在 << ,不是吗?编译器如何评估“有意义”部分?

更新: 在问这个问题时,我认为编译器使用了第二个变体,这就是为什么我想知道编译器是如何得出这个评估的。事实上,第一个被使用,它是正确的。

最佳答案

“有意义”是主观的。这就是为什么编译器不评估“意义”,而是评估基于一组规则的语法。因为<<具有更高的优先级(由那些规则集给出),它将表达式计算为

 a << (b + c) << d

如有疑问,请使用括号。

关于c++ - 令人困惑的运算符优先级 : a << b + c << d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15953184/

相关文章:

c++ - Opencv 人脸变形

C++:重命名目录中的所有文件

c - C/C++ 中的优先顺序

c++ - 强制函数内的静态常量在开始时进行评估?

c - 使用算术索引数组而不是显式/单个值会导致问题吗?

python - 关于生成器表达式中 Python 从内到外的求值顺序

c++ - 初始化列表 - 我可以用同一类的其他成员初始化成员吗?

c++ - 对数组的引用参数有什么用?

c++ - 在 C++11 中创建迭代器时派生行为的基类

python - 我如何解析这种类型的表达式?