d - 为什么 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";
你能解释一下幕后发生的事情吗?
解决方案
这实际上非常简单:编译器知道字符串文字的大小,知道静态数组的大小,并且可以看到它们可以简单地被复制过来,所以它确实如此。然后因为它知道它是一个新副本,所以不需要应用不可变,因为它只适用于对原始副本的引用。
使用char[] baba =
,编译器并不知道所有这些 - 在您的情况下,它正在尝试分配对原始字符串的引用,这意味着可变/不可变不匹配适用,因此它使您明确说明您想要一个副本。
推荐阅读
- java - 用于 Java 应用程序的 MacOS 协同设计,我应该对哪些文件进行协同设计
- c# - 检索 Elasticsearch 文档时使用 JsonSerializer 时的序列化问题
- image - React Native组件的 loadingIndicatorSource 属性不起作用?
- android - Android BLE Scanner 是否总是/自动发出任何 ADV_IND 类型广告的扫描请求?
- javascript - Gtag - 基本“购买”事件未触发
- r - 有没有办法将列表中的每个组件/元素除以与某个因子变量的级别相对应的值
- javascript - Django - 如何将 javascript 变量从另一个文件加载到模板
- excel - 如何使用 VBS 从命令提示符格式化现有的 XLSX 文件?
- rubygems - 为什么运行 Jekyll 主题如此简单看起来不像主题示例(例如缺少主页按钮和徽标)?
- excel - 将 webscrape 限制为 id 组(第 2 部分)