文章目录
随心所欲,最近不想学习真的很烦课内的东西,所以就来发个文。昨天打的第一份稿子幸好还自动保存了,挺不错的。这是我的第一篇文章,我不希望成为和许多博主一样只会复制粘贴和转载三种操作的人。
问题
在C/C++中写下如下代码,编译运行后j的返回值其实是不确定的(多数为4),因编译器和程序运行环境而定。如果你使用clang,则情况会相对好一些,编译器会显式地给出警告。
int j = 4;
j = j++;

常见解答
国内论坛常见的解释为这里先执行了赋值操作,然后j才自增,所以返回j的值仍然是4. 然而这种说法显然是错误的。
理由:
-
j++这种语句是自增,并不需要赋值就能改变变量的值,因此如果仅从运算顺序分析的话无论何种情况最后的结果都应该是5.可以假设,
- j先完成了自己对自己的赋值(即令
j = 4),然后自增,最后其值为5; - j先自增,再赋值,最后
j仍然等于5.
- j先完成了自己对自己的赋值(即令
-
回归C/C++语言基础,赋值语句是从右到左执行的,不存在先赋值再运算的情况。
另外,如果你忘了运算表达式顺序而且不想去回顾(这很不好),还可以实验证明:


1148

被折叠的 条评论
为什么被折叠?



