Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在表达式求值期间,运算符的关联性是如何工作的? 我在C++中学习优先级规则。其中条件运算符被称为具有从右到左的关联性。 我将其解释为表达式的求值从右开始,然后向左进行。 因此,对于下面的代码- int a=1, b=2, c; c=a>b? a=a*2: a=a+3; cout<<c<<" "<<a;_C++_Right To Left_Conditional Operator_Associativity_Left To Right - Fatal编程技术网

在表达式求值期间,运算符的关联性是如何工作的? 我在C++中学习优先级规则。其中条件运算符被称为具有从右到左的关联性。 我将其解释为表达式的求值从右开始,然后向左进行。 因此,对于下面的代码- int a=1, b=2, c; c=a>b? a=a*2: a=a+3; cout<<c<<" "<<a;

在表达式求值期间,运算符的关联性是如何工作的? 我在C++中学习优先级规则。其中条件运算符被称为具有从右到左的关联性。 我将其解释为表达式的求值从右开始,然后向左进行。 因此,对于下面的代码- int a=1, b=2, c; c=a>b? a=a*2: a=a+3; cout<<c<<" "<<a;,c++,right-to-left,conditional-operator,associativity,left-to-right,C++,Right To Left,Conditional Operator,Associativity,Left To Right,但实际产出是有限的 4 4 我不明白这个关联性是如何工作的,因为从上面的输出来看,条件运算符似乎具有从左到右的关联性 关联性告诉您如果一行中有同一运算符的多个实例,会发生什么。比如说, f() - g() - h() c=a>b? a=a*2: a=a+3 解析为 (f() - g()) - h() a ? b : (c ? d : e) 而不是 f() - (g() - h()) 因为-是左关联的,而不是右关联的 所有这些都与求值顺序无关,求值顺序决定首先调用哪个函数 至于?

但实际产出是有限的

4 4

我不明白这个关联性是如何工作的,因为从上面的输出来看,条件运算符似乎具有从左到右的关联性

关联性告诉您如果一行中有同一运算符的多个实例,会发生什么。比如说,

f() - g() - h()
c=a>b? a=a*2: a=a+3
解析为

(f() - g()) - h()
a ? b : (c ? d : e)
而不是

f() - (g() - h())
因为
-
是左关联的,而不是右关联的

所有这些都与求值顺序无关,求值顺序决定首先调用哪个函数

至于
?:
是右关联的,它意味着

a ? b : c ? d : e
解析为

(f() - g()) - h()
a ? b : (c ? d : e)
(如果您将
?…:
看作一个单独的操作符,那么这会稍微有点道理。)

但是,
?:
保证从左到右求值:始终首先求值第一个操作数,然后正好求值其他操作数中的一个(取决于第一个结果的真值)


以你为例,

f() - g() - h()
c=a>b? a=a*2: a=a+3
(请不要将作业放入
?:
中,就像在真实代码中那样)解析为

c = ((a>b) ? (a=a*2) : (a=a+3))
这完全是由于优先级,而不是关联性(我们这里没有多个相同的运算符相邻)


首先计算
a>b
(产生
false
),这将导致计算
a=a+3
(产生
4
),然后将其分配给
c

,您为什么期望
8
?两个分支中只有一个执行,而不是两个都执行,这意味着只有当(表达式中存在另一个具有相同优先级的运算器)否则不存在时,关联性规则才适用。