为了账号安全,请及时绑定邮箱和手机立即绑定

bool a = ++x * x > 3;这行表达式有人能解释一下,是绝对正确的么?

C++编译器并没有规定++运算符的求值顺序,我觉得C#应该也是如此,所以 bool a = ++x * x > 3;这行表达式有人能解释一下,是绝对正确的么?有没有人查过标准。

正在回答

3 回答

http://img1.sycdn.imooc.com//594d331f000117e103850474.jpg因为上面的式子没有括号,那就先运行一元运算符++x,即x+1,然后是 乘除的优先级比较高,那就接着运行乘法*,即(x+1)*x ,然后 得到的值 与3相比较,判断是否正确,把返回的bool值赋值给了bool a 。祝你学习顺利!

1 回复 有任何疑惑可以回复我~
#1

慕无忌7395479 提问者

我是C++程序员,在这里还是要科普一下C++的知识,C++里面可千万别这么想,C++标准没有规定表达式必须从左到右求值。
2017-07-22 回复 有任何疑惑可以回复我~

阿斯顿撒打算大所多

0 回复 有任何疑惑可以回复我~

首先C#教科书是规定了++运算符的,学一门学问还是以教科书为准,不要以自己的经验,况且还是一门软件语言。其次,这个表达式没有问题,如果赋值x=1,那么++x*x=4,显然是先计算的++x,x自增1,因为是前置递增,所以++x=2,计算后的变量x也等于2。那么a为TRUE.你自己可以在软件中测试。

3 回复 有任何疑惑可以回复我~
#1

慕无忌7395479 提问者

我在软件中测试过,确实是正确的,手上没有关于标准的书,我本身对C++比较熟悉,在C++语言标准中有明确的说明,表达式的求值顺序是不一定的,编译器决定何时求值,但是我手上没有C#的标准说明,不知道这个++表达式是何时求值的,后来查了百度,貌似C#语言规定了表达式的求值顺序,必须是从左到右进行求值。关于C++的部分,你可以试试,发行版和调试版本的结果不一样,优化程度不用结果也不一样!
2017-05-01 回复 有任何疑惑可以回复我~
#2

wzh2664219055

int x = 1 x++ *x 和 ++x *x 结果相同吗?我是新手
2018-07-18 回复 有任何疑惑可以回复我~
#3

努力吧少年4369158 回复 wzh2664219055

不同。
2018-07-19 回复 有任何疑惑可以回复我~
#4

HUBanghao

受教了
2022-01-27 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消

bool a = ++x * x > 3;这行表达式有人能解释一下,是绝对正确的么?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信