首页 > 解决方案 > 为什么 D 中的固定长度字符数组允许直接字符串赋值?

问题描述

D 中的字符串只是不可变的字符数组。例如。

immutable(char[]) baba = "Baba Yaga";

这样尝试类似的东西

char[] baba = "Baba Yaga"; // ERROR!

会抛出异常Error: cannot implicitly convert expression "Baba Yaga" of type string to char[]。您需要先使用其.dup属性复制字符串。

char[] baba = "Baba Yaga".dup;

但是,为什么以下工作?

char[9] baba = "Baba Yaga";

你能解释一下幕后发生的事情吗?

标签: d

解决方案


这实际上非常简单:编译器知道字符串文字的大小,知道静态数组的大小,并且可以看到它们可以简单地被复制过来,所以它确实如此。然后因为它知道它是一个新副本,所以不需要应用不可变,因为它只适用于对原始副本的引用。

使用char[] baba =,编译器并不知道所有这些 - 在您的情况下,它正在尝试分配对原始字符串的引用,这意味着可变/不可变不匹配适用,因此它使您明确说明您想要一个副本。


推荐阅读