复制
收藏
提问
简洁
#include using namespace std; int main() { int i,j,k,a=3,b=2; i=(--a==b++) ? --a: ++b; j=a++; k=b; cout << i <<","<< j <<"," << k << endl; return 0; } A. i=2,j=1,k=3 B. i=1,j=1,k=2 C. i=4,j=2,k=4 D. i=1,j=1,k=3
3月前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
在C++中,运算符的优先级和结合性是确定表达式求值顺序的重要规则。然而,求值顺序,即编译器实际执行操作的顺序,是未定义的,这意味着编译器可以以任何顺序求值操作数和其他子表达式92。这与运算符的结合性不同,后者是编译时概念,决定了在表达式中运算符如何组合36。
在提供的代码片段中,我们有以下表达式:
i=(--a==b++) ? --a: ++b;
j=a++;
k=b;
首先,我们分析第一个表达式i=(--a==b++) ? --a: ++b;
。这里涉及到几个运算符,包括前缀递减--a
,比较运算符==
,后缀递增b++
,以及三目运算符?:
。根据运算符优先级,--a
和b++
是一元运算符,==
是二元运算符,?:
是三元运算符。一元运算符的优先级高于二元和三元运算符。然而,由于求值顺序是未定义的,我们不能确定--a
和b++
的确切执行顺序5。
接下来,我们看第二个表达式j=a++;
。这里涉及到后缀递增运算符a++
。后缀递增运算符的结果是递增前的值,但递增操作会在表达式求值后执行1。
最后,第三个表达式k=b;
是直接的赋值操作。
由于求值顺序是未定义的,我们不能确定i
、j
和k
的确切值。然而,我们可以确定的是,a
和b
的初始值分别是3和2。--a
将a
的值减少到2,b++
将b
的值增加到3。但由于求值顺序未定义,我们不能确定i
的值。同样,j
将被赋值为a
的当前值,但由于a++
是后缀递增,a
的值在赋值后会增加,所以j
的值将是a
递增前的值。k
将被赋值为b
的当前值。
因此,我们无法确定i
、j
和k
的确切值,因为求值顺序是未定义的。所以,选项A、B、C和D都不能确定是正确的。
你觉得结果怎么样?