int main(int argc,char* argv[]) { int val = 1; if (val-- == 0) cout << "hello,world" << endl; }
能打印出来 hello,world 吗?
我之前的理解是--运算优先级要高于==,所以这个应该是先做减操作,然后再判断,最后打印 hello,world 。
可是我这边运行后现实是先判断后减。
为啥啊?
1
jimzhong 2017-02-17 13:23:44 +08:00
val--是先返回 val 的值,然后再减 1
|
4
liuhaotian 2017-02-17 13:28:49 +08:00
运算符优先级 和 运算符返回值是不一样的。
--val 的返回值是 val-1 val-- 的返回值是 val 如果不能理解为什么运算符有返回值的话,可以搜一下“运算符重载” |
5
Zirconi 2017-02-17 13:29:07 +08:00
这涉及到所谓的 sequence point 的概念。
还有这不是 C++代码吗。。。 |
6
liuhaotian 2017-02-17 13:30:24 +08:00
@Zirconi
那我觉得 undefined behavior 更是玄学 hhh |
7
hailongs OP ok ,我明白了。脑子朽住了。
|
8
bluefalconjun 2017-02-17 14:32:31 +08:00
@liuhaotian c 玄学很有意思... 哈哈
|
10
Cbdy 2017-02-17 14:58:35 +08:00
这种写法俗称耍小聪明
|
12
visionsmile 2017-02-17 18:14:14 +08:00
The value of a postfix ++ expression is the value of its operand. [ Note: the value obtained is a copy of the original value — end note ]
|
13
visionsmile 2017-02-17 18:16:47 +08:00
The operand of postfix -- is decremented analogously to the postfix ++ operator, except that the operand shall not be of type bool.
|
14
ningcool 2017-02-17 18:36:59 +08:00
你可以试试 --val 返回 0
|
15
fei051466 2017-02-17 20:42:36 +08:00
刚学编程的时候这个老考, hhhh
|
16
ryd994 2017-02-18 02:12:51 +08:00 via Android
说实话,编程课考这种屁用没有
能不能好好写代码,明明一个 for 能解决的问题 这样编译器很难办的好不好,都没法优化 |
18
snnn 2017-02-18 22:12:08 +08:00
你是分不清 i++ 和 ++i 吧?
|