2014-01-12 50 views
2

據我所知,D中的地圖具有價值語義。D中關聯數組的穩定性

如果是這樣,爲什麼在這個例子中,第二行失敗

const(uint[ubyte]) x; 
uint[ubyte] y = x; 

Error: cannot implicitly convert expression (x) of type const(uint[ubyte]) to uint[ubyte] 

當兩個鍵和值也有值語義?

回答

5

據我所知,D中的地圖具有價值語義。

D關聯數組是參考類型。

它們在內部表示爲指向實現定義的數據結構的指針。 (請注意,如果AA是null,它不會像參考類型那樣起作用,因爲添加第一個成員會將其實例化。)

+0

嗯,我必須在我的值語義測試中弄錯自己。現在我必須將所有'x = y'改爲'x = y.dup'。謝謝。 –

+0

現在自然的問題變成了;是否有一個特徵來檢查一個類型是否有值或引用語義? –

+0

Phobos中是否有一些實用函數總是創建一個類型的新副本(靜態,動態和關聯數組)?我相信在我的模板中使用.dup是因爲當x和y都是靜態數組(相同大小)時執行'y = x.dup'不會做正確的事情;它會在中間創建一個不需要的動態數組副本,對吧?或者DMD足夠聰明地優化掉動態數組? –