在一些面试题中,很多面试官会故意出一些很刁钻的题来考面试者。当面对这种问题时,不要慌,第一个出口的答案必须是,虽然这些看起来技巧性很高的代码对我们理解语言与编译器的本质很有用途,但是实际开发过程中应该尽量避免高技巧性的写法,尽量做到通俗易懂,下面以我个人的见解对这道题的分析是:
譬如下面这些题:
1、请问:
#include <IOSTREAM>
using namespace std;
int main()
{
int i = 10;
i = (i++) + (i++) + (++i);
cout << i <<endl;
return 0;
}
输出的i的结果会是多少?
答案是:
好,下面我们来进行简单的分析(如果你实在看不懂下边的汇编源码,万不得已可以记住这个定律)
无论如何i++总是在一条语句中直接取i进行运算,等语句执行完再执行自加;就譬如j=i++一样可以拆成j=i和i=i+1;
我们总是会把i代入给j等到语句结束后后面再执行i=i+1;
而在一道表达式里++i总是在任何一个执行到他的语句的前一时刻执行,我们讲得生动点就是,你先在这稍等一下,让我++i执行完了再来告诉你继续执行
好了,有了上面2个分析点,我们来分析一下i = (i++) + (i++) + (+