C++三元运算符混淆

标签 c++ operator-keyword ternary

我有下面的程序,除了我以外,每个人都应该很简单!

#include <iostream>
using namespace std;
int main()
{

int a, b;
b = 1;

cout << ((a = --b) ? b : (b = -99)) << '\n' << "a is " << a << '\n' << "b is " << b << endl;

b = 1;
cout << (a = --b ? b : (b = -99)) << '\n' << "a is " << a << '\n' << "b is " << b << endl;


}

程序的输出是:

-99

a 为 0

b是-99

-99

a是-99

b是-99

第一段代码我的理解是a被赋予了值--b,0,所以它变成了false,所以b=-99被执行了。我无法理解第二段代码,其中 a=--b 没有括号,为什么 a 的值为 -99。

最佳答案

这是因为 =?: ( C++ operator priorities ) 具有相同的优先级。在这种情况下,因为它们具有从右到左 的关联性,所以它们是从右到左求值的。所以首先表达式 --b ? b : (b = -99) 被评估为 -99 然后它被分配给 a

关于C++三元运算符混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21208115/

相关文章:

c++ - 如何解决 operator>> 重载错误(不匹配 'operator>>' )

javascript - map() 中的三元运算符 react

c++ - 重载函数产生不明确的错误

python - `operator.__inv__` 存在的目的是什么?

c++ - 如何使用模板元编程在 C++17 中将一种类型转换为另一种类型?

C 程序和宏

css - react : Conditional rendering CSS classes with Animate on Scroll library

lua - Lua 中的内联条件 (a == b ? "yes": "no")?

c++ - NSObject PerformSelector 问题

c++ - 模板类的运算符<<()