阅读 15145 次
发表时间:2010-10-08
看回复就发现很多人不应该做程序员,应该去做粪青。屁都不懂就知道武断。

ps:这类题玩得太多也没有意思,你还可以找些更诡异的拿来问面试官。
发表时间:2010-10-08
#include <iostream>

int main(void){
	int j = 0;
	j = j++;
	std::cout<<j<<std::endl;
	return 0;
}


------------------------------------
0

Terminated with return code 0
Press any key to continue ...

发表时间:2010-10-08
polaris1119 写道
icefishc 写道

c++的事还真不能靠试。。。 在c++这个应该是undefined behavior

undefined behavior?从何体现?编译不通过?

undefined behavior的意思就是
它的结果不确定,也许取决于你用的编译器也许取决于你的优化参数或其他外部条件。
你所看到的结果只是一种可能。
发表时间:2010-10-08
yangguo 写道
看回复就发现很多人不应该做程序员,应该去做粪青。屁都不懂就知道武断。

ps:这类题玩得太多也没有意思,你还可以找些更诡异的拿来问面试官。

的确,这种题也就是一些无聊的面试官会出,他们碰巧知道这个,然后就想刁难你。其实没啥意思。不过为了应付面试又得了解点。
发表时间:2010-10-08
Crusader 写道
#include <iostream>

int main(void){
	int j = 0;
	j = j++;
	std::cout<<j<<std::endl;
	return 0;
}


------------------------------------
0

Terminated with return code 0
Press any key to continue ...


请问用的啥编译器?我用Visual Studio 2008测试结果不是这样的。是1
发表时间:2010-10-08
icefishc 写道
polaris1119 写道
icefishc 写道

c++的事还真不能靠试。。。 在c++这个应该是undefined behavior

undefined behavior?从何体现?编译不通过?

undefined behavior的意思就是
它的结果不确定,也许取决于你用的编译器也许取决于你的优化参数或其他外部条件。
你所看到的结果只是一种可能。

你说的有道理,这个结果的确跟编译器有关,而C++编译器又有不同的实现,因而可能结果真的不一样。我用VS测试结果是1。
发表时间:2010-10-08
1
GCC 4.4.1
这种题确实没啥意义,
真面这样的题,你就问他要是我写出类似于i=(++i)+(i++)的代码,
领导还不把我给开了
发表时间:2010-10-08
cch123 写道
1
GCC 4.4.1
这种题确实没啥意义,
真面这样的题,你就问他要是我写出类似于i=(++i)+(i++)的代码,
领导还不把我给开了

虽然这么写是错的, 但题还是有意义的。这些都属于基础知识。 如果答不出来那怎么知道为什么不这么写。
发表时间:2010-10-08
polaris1119 写道
Crusader 写道
#include <iostream>

int main(void){
	int j = 0;
	j = j++;
	std::cout<<j<<std::endl;
	return 0;
}


------------------------------------
0

Terminated with return code 0
Press any key to continue ...


请问用的啥编译器?我用Visual Studio 2008测试结果不是这样的。是1


MinGW,个人认为前后缀++实现如下:
++x  →  (x+=1)
x++  →  (temp=x, x+=1, temp) 注意逗号表达式

发表时间:2010-10-09
即JAVA先将i的值保存到临时内存空间中,然后处理++,即原来的j加1
----------------------------------
应该是先将j的值保存到临时内存空间中吧。
Global site tag (gtag.js) - Google Analytics