題目是這樣的:
問(wèn):不使用任何循環(huán)語(yǔ)句,遞歸,輸出打印n條(n>1) "Hello World"。
解這道題目,利用了c++語(yǔ)言一個(gè)非常重要的特性:
c++允許定義基于statck數(shù)據(jù)區(qū)的Object。由此,不由想到了Java.
在Java的世界里,所有的類型都是引用(或者稱為指針), 對(duì)象內(nèi)存的分配都是通過(guò)new從heap上顯式的分配,無(wú)法在Java里構(gòu)建基于statck數(shù)據(jù)區(qū)的對(duì)象。所以在Java里,這道題目是無(wú)解的。
Java之于c++,既是進(jìn)步,又是倒退。
Java語(yǔ)言本身的確幫助c++程序員做了很多事情,比如GC, 去掉了c++中很多復(fù)雜的特性,比如多重繼承,運(yùn)算符重載等。
同時(shí),c++本身的很多優(yōu)點(diǎn),也喪失了。 寫了c++, 然后再寫java,一個(gè)明顯的感覺是,沒法使用java寫出像c++一樣簡(jiǎn)潔的程序。
比如, 沒有了運(yùn)算符重載, 你不得不使用equal方法來(lái)表達(dá)兩個(gè)對(duì)象的相等。
Java不能顯式表達(dá)RAII概念,你不得不使用hard code的方法Log方法的進(jìn)入和退出, 如:
func() {
log("enter func");
//do something.
log("exit func");
}