2016-08-31 24 views
0

在d,是否有使用指針的情況下使用和執行簡單的類型D.(DLang)二元`is`操作者的

void * p; 
if (p is null) { }  // #1 

二進制is操作者之間的任何差異,與簡單地要麼

if (! p) { }   // #2a 

if (p == null) { }  // #2b 

沒有爲運營商? (DLang)

(我限制這個簡單的標量類型,沒有聚集或複雜類型。據我所知,有類is簡單地比較它們的地址,IIRC)

回答

4

隨着void*類型,像其他普通指針,沒有區別。與int也沒有什麼不同,但與其他類型有所不同,包括float,數組(包括字符串),結構和類。

我建議你總是寫出你的意思與任何類型,所以如果你稍後改變類型就沒問題。使用is來查看兩個引用是否相同。使用==查看內容是否相同。避免!p,除非可能p被稱爲是普通的bool類型,因爲它具有最令人驚訝的行爲(它確實可以調用結構和類上的重載opCast!bool,並且對數組調用.ptr !is null,這打開了null vs vs零長度陣列)。最好只說出你的意思,並保持代碼的可讀性和對重構的彈性。

相關問題