回答
我繞導的陣列部分搜索,這可能會幫助:
char[] str1 = "abc"; // error, "abc" is not mutable
char[] str2 = "abc".dup; // ok, make mutable copy
invariant(char)[] str3 = "abc"; // ok
invariant(char)[] str4 = str1; // error, str4 is not mutable
invariant(char)[] str5 = str1.idup; // ok, make invariant copy
從here。
非常感謝,應該看看我自己。我不明白關於可變和不可變的整個事情。爲什麼我不能簡單地將一個不可變的char序列分配給一個char數組? – user32756 2009-02-17 14:31:57
基本上,它所涉及的是字符串文字存儲在內存的只讀部分。 char[]
是「可變字符的可變陣列」,如果寫入該字符,則會生成運行時崩潰。
所以編譯器真的試圖在這裏保護你。
invariant(char)[]
意味着「一個不變字符的可變陣列」,這正是它是什麼。
PS:當你不需要這是一個char[]
,你可能想使用auto
,如,auto variable = "value"
。讓您擺脫考慮它的類型:)
使用汽車,也不用擔心是什麼類型:
auto s = "some text";
讓有關的類型編譯器擔心。
D語言有兩個主要版本。它們通常互不相容,但代碼可以編寫爲以同時編譯。
D1是您提供的代碼似乎寫入的內容。它沒有不可變數組的概念,因此可以工作。
D2是你試圖編譯它,因此2開始編譯器的版本號。 D2的主要特徵之一是const和不可變/不變數據引用的概念。
char[] text; // mutable data
const(char)[] ctext; // data may be mutable or immutable - but either way,
// it will not be changed through this reference
invariant(char)[] itext; // immutable data
在D2字符串文本被歸類爲不可變的數據,因此不能被分配給一個char [],但只有一個const(char)[]
invariant(char)[]
或(或WCHAR或dchar當量)。
string
是invariant(char)[]
的別名,您可能想要將其用於方便或D1兼容性。
- 1. D編程語言IRC庫
- 2. D編程語言中的空字符串
- 3. d語言線程
- 4. MPI爲d的編程語言
- 5. 什麼是'D'編程語言?
- 6. D編程語言中的C#事件
- 7. 更新結構 - d編程語言
- 8. D編程語言中的Pimpl-idiom
- 9. 文件I/O在d編程語言
- 10. 控制D編程語言中的並行線程數
- 11. J編程語言中的數組
- 12. 如何安裝D編程語言的數據庫綁定?
- 13. 2-d字符數組
- 14. 彙編語言數組
- 15. D語言,Eclipse,編譯跨項目
- 16. 用java語言編寫的字符串數組邏輯問題
- 17. 以彙編語言打印字符串數組
- 18. 去編程語言:json編組
- 19. d編程語言教程 - 一個圓的面積 - 錯誤:toFloat
- 20. D編程語言是否有GNU Make-type程序?
- 21. E語言支持D語言
- 22. D語言的語言自省
- 23. 編程語言
- 24. 數學編程語言
- 25. 字符/語言
- 26. D語言 - 線程vs產卵
- 27. 在.NET上下文中使用D編程語言
- 28. 在現實世界中的D編程語言?
- 29. 我如何使用std.socket和std.socketstream? (D編程語言2.x)
- 30. D編程語言是否使用增量垃圾回收器?
該頁面已過期。請查看ftp.digitalmars.com以獲取最新版本的DMD。 – dsimcha 2009-02-17 14:42:52
你是對的,謝謝。 – user32756 2009-02-17 15:41:49
恆定字已被替換爲不可變且不會存在於穩定版本的D2.x – 2009-08-19 15:29:59