C++ 表达式值(运算符优先级)

标签 c++ operator-precedence conditional-operator prefix-operator

以下表达式:-

int main()
{
    int x=2, y=9;
    cout << ( 1 ? ++x, ++y : --x, --y);
}

给出以下输出:-

9

根据我的理解,它应该返回++y,它应该是 10。哪里出了问题?

最佳答案

与逗号运算符 (,) 相比,三元运算符(?:)具有更高的优先级。因此,首先评估三元条件中的表达式,然后使用逗号运算符拆分语句。

1 ?++x,++y : --x, --y

本质上变成了

   (1 ? (++x, ++y) : (--x)), (--y)
/* ^^^^^^^^^^^^^^^^^^^^^^^^ is evaluated first by the compiler due to higher position in
                            the C++ operator precedence table */

您可以通过简单地将表达式括在括号中来消除该问题:

1 ? (++x,++y) : (--x, --y)

这会强制编译器先计算括号内的表达式,而不考虑运算符的优先级。

关于C++ 表达式值(运算符优先级),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68561248/

相关文章:

C# - 在三元运算符中呈现部分

c++ - 所有类型的矢量化随机数生成

c++ - 使用 Qt 和 libusb 将 USB 序列号与端口名称匹配

c++ - 标准化 2D/3D vector/坐标类

c - 运算符优先级(按位 '&' 低于 '==' )

ternary-operator - 扩展调车场算法以支持条件三元运算符

c - 为什么 C 在使用条件运算符时不允许连接字符串?

c++ - 浮点 == 可以吗?

c++ - C++17 引入的评估顺序保证是什么?

ruby - 这个串联的运算顺序是什么?